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!

@KeyFramesispopulardUeToitSverSatility und PowerIncreatingsmoothcsSanimations.KectrickSinclude: 1) DefiningsmoothTransitionSbetTates, 2) AnimatingMultipleProperTiesimultan, 3) mit VendorprefixesforBrowserCompatible, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren

CSSCOUSTERSSARUSTOMANAGEAUTOMATICNUMBERINGINWEBDEsigns.1) Sie konzipieren SieForsofcontents, ListItems und CustomNumbering.2) AdvanceduSesincnednumberingSystem.3) CHEFORDIGESINCLUDSERCOMPATIBILIBLEISE.4) CreativeuSinvolvecustInance

Die Verwendung von Scroll -Schatten, insbesondere für mobile Geräte, ist ein subtiles Stück UX, das Chris zuvor abgedeckt hat. Geoff deckte einen neueren Ansatz ab, der die Immobilie der Animationszeit verwendet. Hier ist ein anderer Weg.

Lassen Sie uns eine kurze Auffrischung durchlaufen. Bildkarten datieren bis zu HTML 3.2, wobei zuerst die serverseitigen Karten und dann die clientseitigen Karten klickbare Regionen über ein Bild mit Karten- und Bereichselementen definiert sind.

Die Umfrage von State of Devs ist nun offen für die Teilnahme und deckt im Gegensatz zu früheren Umfragen alles außer Code ab: Karriere, Arbeitsplatz, aber auch Gesundheit, Hobbys und mehr.

CSS Grid ist ein leistungsstarkes Tool zum Erstellen komplexer, reaktionsschneller Weblayouts. Es vereinfacht das Design, verbessert die Zugänglichkeit und bietet mehr Kontrolle als ältere Methoden.

In Artikel wird CSS Flexbox erörtert, eine Layoutmethode zur effizienten Ausrichtung und Verteilung des Raums in reaktionsschnellen Designs. Es erklärt die Verwendung von Flexbox, vergleicht es mit CSS -Gitter und Details Browser -Unterstützung.

In dem Artikel werden Techniken zum Erstellen von reaktionsschnellen Websites mithilfe von CSS erörtert, einschließlich Ansichtsfenster -Meta -Tags, flexiblen Gitter, Flüssigkeitsmedien, Medienabfragen und relativen Einheiten. Es deckt auch mit CSS -Raster und Flexbox zusammen und empfiehlt CSS -Framework


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

Dreamweaver CS6
Visuelle Webentwicklungstools

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

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

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung
