Indem wir den aktuellen Bildlaufversatz zu den Attributen des HTML-Elements hinzufügen, können wir die Elemente auf der Seite basierend auf der aktuellen Bildlaufposition gestalten. Wir können dies verwenden, um eine Navigationskomponente zu erstellen, die oben auf der Seite schwebt. Dies ist das HTML, das wir verwenden werden. Die Komponente <header> ist diejenige, die beim Scrollen nach unten immer oben auf der Seite schweben soll. <header>Ich bin der Seitenkopf</header> <p>Hier gibt es jede Menge Inhalt...</p> <p>Weitere schöne Inhalte...</p> <p>Inhalt...</p> Zuerst warten wir auf das „Scroll“-Ereignis im Dokument und jedes Mal, wenn der Benutzer einen Bildlauf durchführt, erhalten wir den aktuellen ScrollY-Wert. document.addEventListener('scroll', () => { Dokument.documentElement.dataset.scroll = Fenster.scrollY; }); Wir speichern die Scrollposition im Datenattribut des HTML-Elements. Wenn Sie sich das DOM mit den Entwicklertools ansehen, sieht es folgendermaßen aus: <html data-scroll="0"> /* Stellen Sie sicher, dass das Header-Tag immer höher als 3em ist */ Kopfzeile { Mindesthöhe: 3em; Breite: 100 %; Hintergrundfarbe: #fff; } /* Dieselbe Höhe wie die Mindesthöhe der Kopfzeile oben auf der Seite beibehalten */ html:nicht([data-scroll='0']) body { Polsterung oben: 3em; } /* Schalten Sie das Header-Tag in den festen Positionierungsmodus und fixieren Sie es oben auf der Seite*/ html:nicht([data-scroll='0']) header { Position: fest; oben: 0; Z-Index: 1; /* Die Box-Shadow-Eigenschaft kann den Schwebeeffekt verstärken*/ Kastenschatten: 0 0 .5em rgba(0, 0, 0, .5); } Das ist im Wesentlichen alles: Wenn der Benutzer nach unten scrollt, löst sich das Header-Tag automatisch von der Seite und schwebt über dem Inhalt. Der JavaScript-Code kümmert sich nicht darum, seine Aufgabe besteht darin, den Scroll-Offset in das Datenattribut einzufügen. Das ist perfekt, da keine enge Kopplung zwischen JavaScript und CSS besteht. Es gibt jedoch noch einige Bereiche, die verbessert werden können, vor allem im Hinblick auf die Leistung. Zuerst müssen wir das JavaScript-Skript ändern, um der Situation gerecht zu werden, dass die Bildlaufposition beim Laden der Seite nicht oben ist. In solchen Fällen wird das Header-Tag falsch gerendert. Wenn die Seite geladen wird, müssen wir schnell den aktuellen Scroll-Offset abrufen. Dadurch wird sichergestellt, dass wir immer mit dem aktuellen Status der Seite synchronisiert sind. // Lesen Sie die Scrollposition der aktuellen Seite und speichern Sie sie in der Dateneigenschaft des Dokuments // damit wir sie in unserem Stylesheet verwenden können const storeScroll = () => { Dokument.documentElement.dataset.scroll = Fenster.scrollY; } // Auf Scroll-Ereignisse warten document.addEventListener('scroll', storeScroll); // Aktualisiere die Scrollposition, wenn die Seite zum ersten Mal geöffnet wird storeScroll(); Als Nächstes sehen wir uns einige Leistungsverbesserungen an. Wenn wir die ScrollY-Position erhalten möchten, muss der Browser die Position jedes Elements auf der Seite berechnen, um sicherzustellen, dass er die richtige Position zurückgibt. Es wäre am besten, wenn wir es nicht zwingen würden, bei jedem Scrollen einen Wert anzunehmen. Dazu benötigen wir eine Debounce-Methode, die unsere Abrufanfragen in die Warteschlange stellt, bis der Browser bereit ist, den nächsten Frame zu zeichnen. Zu diesem Zeitpunkt hat er bereits die Positionen aller Elemente auf der Seite berechnet, sodass er nicht immer wieder die gleiche Arbeit ausführen muss. // Die Entprellfunktion akzeptiert eine benutzerdefinierte Funktion als Parameter const entprellen = (fn) => { // Dies enthält einen Verweis auf requestAnimationFrame, sodass wir es jederzeit stoppen können, wenn wir let frame möchten. // Die Entprellfunktion gibt eine neue Funktion zurück, die mehrere Parameter akzeptieren kann return (...params) => { // Wenn der Wert von Frame vorhanden ist, lösche den entsprechenden Rückruf if (Frame) { Animationsrahmen abbrechen(Rahmen); } // Lassen Sie unseren Rückruf ausführen, wenn der Browser das nächste Frame aktualisiert frame = requestAnimationFrame(() => { // Führen Sie unsere benutzerdefinierte Funktion aus und übergeben Sie unsere Parameter fn(...params); }); } }; // Liest die Scrollposition aus und speichert sie im Datenattribut // damit wir es in unseren Stylesheets verwenden können const storeScroll = () => { Dokument.documentElement.dataset.scroll = Fenster.scrollY; } // Auf neue Scroll-Ereignisse warten, hier entprellen wir unsere `storeScroll`-Funktion document.addEventListener('scroll', entprellung(storeScroll)); // Scrollposition zum ersten Mal aktualisieren speichernScrollen(); Indem wir das Ereignis als passiv markieren, können wir dem Browser mitteilen, dass unser Scroll-Ereignis nicht durch Touch-Interaktionen blockiert wird (wie beispielsweise bei der Interaktion mit Plugins wie Google Maps). Dadurch kann der Browser die Seite sofort scrollen, da er nun weiß, dass das Ereignis nicht blockiert wird. document.addEventListener('scroll', entprellung(storeScroll), { passiv: true }); Nachdem das Leistungsproblem behoben wurde, können wir nun JavaScript stabil nutzen, um die abgerufenen Daten in CSS einzuspeisen und sie zum Stylen von Elementen auf der Seite zu verwenden. Live-Demo auf CodePen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. |
<<: Verwenden Sie js, um js-Funktionen in Iframe-Seiten aufzurufen
>>: Analyse mehrerer Situationen, in denen der MySQL-Index fehlschlägt
Binlog ist eine binäre Protokolldatei, die zum Au...
1. Voraussetzungen: Die Datenbanksicherung ist be...
Überlegungen zu den beiden Sichtweisen „menscheno...
Als ich heute mit der Baidu-Seite übte, stellte i...
Kernel: [root@opop ~]# cat /etc/centos-release Ce...
Original : http://developer.yahoo.com/performance...
Inhaltsverzeichnis 1.mysqldump Ausführungsprozess...
Das feste Layout des Seitenkopfes wurde zuvor mit...
Alles braucht ein Fundament. Um ein Haus zu bauen...
Streng geprüfte Attribute Das offizielle Dokument...
Bevor Sie diesen Artikel lesen, sollten Sie sich ...
Inhaltsverzeichnis Vorbereitende Vorbereitung Ber...
Dieser Artikel veranschaulicht anhand von Beispie...
Hier sind einige gängige MySQL-Befehle für Sie: -...
In diesem Artikel wird das MySQL-Sicherungsskript...