Nahezu unendliches Scrollen mit Angular
Unendliches Scrollen gibt es schon seit einiger Zeit. Die Grundidee: Während Sie scrollen, werden unten neue Inhalte geladen, sodass ein scheinbar endloser Scrollvorgang entsteht. Die Umsetzung ist einfach, aber ohne sorgfältige Planung leidet die Leistung. Nach ein paar erneuten Inhaltsabrufen könnten Hunderte von DOM-Elementen vorhanden sein, von denen viele unsichtbar sind. Glücklicherweise gibt es Muster, um dies zu mildern, und wir werden eines mit Angular untersuchen.
Das wollen wir vermeiden.
Virtuelles Scrollen
Virtueller Bildlauf rendert immer nur eine Teilmenge einer großen Liste – im Gegensatz zum unendlichen Bildlauf. Es ist ideal für große Datensätze, bei denen das Rendern aller Daten auf einmal ineffizient ist. Es werden nur sichtbare (und nahezu sichtbare) Elemente gerendert; Während der Benutzer scrollt, werden Elemente dynamisch ausgetauscht. Dadurch werden DOM-Elemente erheblich reduziert und die Leistung gesteigert.
Virtuelles Scrollen funktioniert durch die Erstellung eines Containers, der der Höhe des Ansichtsfensters entspricht. Nur die sichtbaren Elemente (plus ein Puffer) werden in diesem Container mit einer bestimmten Scrolltiefe gerendert, die über CSS verwaltet wird. Durch Scrollen wird der Container aktualisiert, indem neue Elemente angezeigt und aus der Ansicht entfernt werden, wobei die Scrolltiefe angepasst wird. Kombiniert man dies mit unendlichem Scrollen, entsteht eine praktisch unendliche Liste ohne Leistungseinbußen.
Das folgende Beispiel zeigt eine Liste mit Tausenden von Elementen, rendert jedoch maximal 8 auf einmal. Durch Scrollen wird die CSS-Scrollhöhe angepasst, wodurch die Illusion einer viel längeren Liste entsteht.
Beispiel aus der Praxis
Lassen Sie uns eine Angular-Anwendung erstellen, die Medien aus der paginierten API von Reddit abruft und sie in einer virtuellen Bildlaufliste anzeigt. Es enthält eine Suchleiste für die Subreddit-Auswahl und einen Filter. Wenn Sie nach unten scrollen, werden weitere Inhalte geladen. Unsere wichtigsten Anforderungen:
- Angetrieben durch RxJS Observables und die asynchrone Pipe.
- Setzt Inhalte bei Subreddit- oder Filteränderungen zurück, jedoch nicht beim Anhängen neuer Inhalte.
- Speichert vorherige Inhalte im Speicher für nahtloses Scrollen nach oben/unten ohne redundante API-Aufrufe.
Wir verwenden das Paket @angular/cdk
(das die Virtual Scroller-Komponente enthält). Installieren Sie es mit npm i @angular/cdk
.
Während dieses Beispiel Angular verwendet, sind ähnliche Muster auf React, Vue oder Vanilla JavaScript anwendbar. Eine grundlegende Demo, die die zugrunde liegenden Prinzipien veranschaulicht, ist hier verfügbar.
Service-Setup
Zuerst erstellen wir einen Dienst zum Abrufen von Inhalten aus der Reddit-API mithilfe von Angulars HttpClient
und RxJS Observables, um den Subreddit-Namen und -Filter zu verwalten. (Der Kürze halber wurde ein Teil des Codes weggelassen; die vollständige Implementierung finden Sie hier).
// ... (Omitted for brevity) ...
Die Methode zum Abrufen von Inhalten verfolgt bestimmte Eigenschaften während Datenanforderungen. Der Abfragezeichenfolge wird eine page
-Eigenschaft hinzugefügt, um sicherzustellen, dass nach dem letzten Element neuer Inhalt abgerufen wird. Wir filtern auch NSFW-Inhalte und Artikel heraus, denen ein Beitragshinweis fehlt. Dadurch wird sichergestellt, dass nur erwartete Inhalte angezeigt werden.
// ... (Omitted for brevity) ...
Das query$
Observable (zuvor weggelassen) führt verschiedene Observable-Streams zusammen, bevor Inhalte abgerufen werden. Der scan
-Operator kombiniert frühere und aktuelle Stream-Ergebnisse und erstellt so ein großes Datenarray über mehrere Seiten.
Dies ermöglicht ein umfangreiches Scrollen; Nur Subreddit-Namen oder Filteränderungen lösen einen vollständigen erneuten Abruf aus. nextPage
, eine Eigenschaft von query$
, speichert die letzte Element-ID im aktuellen Satz und wird verwendet, um zu bestimmen, welche Seite als nächstes abgerufen werden soll, wenn man sich dem unteren Rand des virtuellen Scrollers nähert.
// ... (Omitted for brevity) ...
Die Stärke von RxJS liegt in der Kombination und Manipulation von Datenströmen. Dadurch können wir die Geschäftslogik verwalten, bevor sie die Komponente erreicht, wodurch die Komponente sauberer und wiederverwendbar bleibt.
Komponenten-Setup
Als nächstes richten wir die Komponente so ein, dass sie Inhalte mit Angulars CdkVirtualScrollViewport
anzeigt. Eine Methode übernimmt das Scrollen am unteren Rand des Ansichtsfensters und ruft die nächste Seite über das subRedditPage$
Observable.
// ... (Omitted for brevity) ...
Die Vorlage verwendet die asynchrone Pipe, um query$
zu abonnieren. Hinweis: Virtuelle Scroller werden bei Inhalten mit variabler Höhe komplexer; Für die Leistung werden einheitliche Artikelhöhen empfohlen.
// ... (Omitted for brevity) ...
Die onScroll
-Methode ruft mehr Inhalte ab, wenn sich der Benutzer dem Ende nähert. Es verwendet die nextPage
-ID (von query$
) und sendet an subRedditPage$
, wodurch der nächste API-Aufruf ausgelöst und die Liste über query$
aktualisiert wird.
// ... (Omitted for brevity) ...
Die Suchleiste und die Tab-Steuerelemente sind ebenfalls integriert (vereinfachtes Beispiel unten).
// ... (Omitted for brevity) ...
Fazit
Dadurch entsteht ein praktisch unendlicher Scroller. Sie können es hier testen. Für die API von Reddit gelten Ratenbeschränkungen. Sie könnten sie während des Tests treffen. Weitere Details, einschließlich zusätzlicher Funktionen, finden Sie im GitHub-Repository hier.
Das obige ist der detaillierte Inhalt vonNahezu unendliches Scrollen mit Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Versuchen wir, hier einen Begriff zu prägen: "Statischer Formanbieter". Sie bringen Ihre HTML

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

In der Zusammenfassung der Plattformnachrichten in dieser Woche stellt Chrome ein neues Attribut für das Laden, Zugänglichkeitspezifikationen für Webentwickler und die BBC -Bewegungen ein

Ich schaue mir das HTML -Element zum ersten Mal an. Ich habe es für eine Weile dessen bewusst, aber Haven ' Es wurde es noch nicht für einen Dreh genommen. Es hat einige ziemlich cool und

Buy or Build ist eine klassische Technologiedebatte. Das Aufbau von Dingen selbst ist vielleicht billiger, weil Ihre Kreditkartenrechnung keine Werbebuchung gibt, aber

In der Roundup in dieser Woche, einem praktischen Lesezeichen für die Inspektion von Typografie, unter Verwendung dessen, wie sich JavaScript -Module gegenseitig importieren, sowie Facebook ' s.

Für eine Weile war iTunes der große Hund im Podcasting. Wenn Sie also "Abonnieren Sie Podcast" verlinkt haben, um zu mögen:

Es gibt eine Menge Analyseplattformen, mit denen Sie Besucher- und Nutzungsdaten auf Ihren Websites verfolgen können. Vielleicht vor allem Google Analytics, das weit verbreitet ist
