Inhaltsverzeichnis
Virtuelles Scrollen
Beispiel aus der Praxis
Service-Setup
Komponenten-Setup
Fazit
Heim Web-Frontend CSS-Tutorial Nahezu unendliches Scrollen mit Angular

Nahezu unendliches Scrollen mit Angular

Jan 07, 2025 pm 08:15 PM

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.

Virtually Infinite Scrolling with Angular

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.

Virtually Infinite Scrolling with Angular

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:

  1. Angetrieben durch RxJS Observables und die asynchrone Pipe.
  2. Setzt Inhalte bei Subreddit- oder Filteränderungen zurück, jedoch nicht beim Anhängen neuer Inhalte.
  3. 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) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

ab
// ... (Omitted for brevity) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Suchleiste und die Tab-Steuerelemente sind ebenfalls integriert (vereinfachtes Beispiel unten).

// ... (Omitted for brevity) ...
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1672
14
PHP-Tutorial
1277
29
C#-Tutorial
1257
24
Ein Vergleich statischer Formanbieter Ein Vergleich statischer Formanbieter Apr 16, 2025 am 11:20 AM

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

Ein Beweis für das Konzept, um Sass schneller zu machen Ein Beweis für das Konzept, um Sass schneller zu machen Apr 16, 2025 am 10:38 AM

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

Wöchentliche Plattformnachrichten: HTML -Ladeattribut, die Haupt -ARIA -Spezifikationen und Wechsel von Iframe zu Shadow Dom Wöchentliche Plattformnachrichten: HTML -Ladeattribut, die Haupt -ARIA -Spezifikationen und Wechsel von Iframe zu Shadow Dom Apr 17, 2025 am 10:55 AM

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

Einige praktisch mit dem HTML-Dialogelement Einige praktisch mit dem HTML-Dialogelement Apr 16, 2025 am 11:33 AM

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

Papierform Papierform Apr 16, 2025 am 11:24 AM

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

Wöchentliche Plattform News: Textabstand Lesezeichen, Top-Level-Erwartung, neuer Verstärker-Ladeindikator Wöchentliche Plattform News: Textabstand Lesezeichen, Top-Level-Erwartung, neuer Verstärker-Ladeindikator Apr 17, 2025 am 11:26 AM

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 &#039; s.

Wohin sollte 'Podcast' -Link abonnieren? Wohin sollte 'Podcast' -Link abonnieren? Apr 16, 2025 pm 12:04 PM

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

Optionen zum Hosting Ihrer eigenen nicht-javaScript-basierten Analysen Optionen zum Hosting Ihrer eigenen nicht-javaScript-basierten Analysen Apr 15, 2025 am 11:09 AM

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

See all articles