Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Dokument: scrollsnapchanging-Ereignis

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

Want more browser support for this feature? Tell us why.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Das scrollsnapchanging-Ereignis des Document-Interfaces wird auf dem Scroll-Container ausgelöst, wenn der Browser feststellt, dass ein neues Scroll-Snap-Ziel vorgemerkt ist, das heißt, dass es ausgewählt wird, sobald die aktuelle Scroll-Geste endet.

Dieses Ereignis funktioniert weitgehend wie das scrollsnapchanging-Ereignis des Element-Interfaces. Allerdings muss hier das gesamte HTML-Dokument als Scroll-Snap-Container festgelegt sein (das heißt, scroll-snap-type wird auf dem <html>-Element gesetzt).

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

js
addEventListener("scrollsnapchanging", (event) => { })

Alternativ können Sie dem Event-Handler-Attribut des Interfaces einen Wert zuweisen:

js
onscrollsnapchanging = (event) => { }

Ereignistyp

Ein SnapEvent, das vom allgemeinen Typ Event erbt.

Beispiele

Grundlegende Verwendung

Angenommen, ein <main>-Element enthält so viel Inhalt, dass darin gescrollt werden muss:

html
<main>
  <!-- Significant content -->
</main>

Das <main>-Element kann mithilfe einer Kombination von CSS-Eigenschaften zu einem Scroll-Container gemacht werden, zum Beispiel:

css
main {
  width: 250px;
  height: 450px;
  overflow: scroll;
}

Anschließend können wir Scroll-Snapping für den scrollbaren Inhalt implementieren, indem wir die Eigenschaft scroll-snap-type auf dem <html>-Element festlegen:

css
html {
  scroll-snap-type: block mandatory;
}

Das folgende JavaScript-Snippet bewirkt, dass das scrollsnapchanging-Ereignis auf dem HTML-Dokument ausgelöst wird, wenn ein Kindelement des <main>-Elements zu einem vorgemerkten Snap-Ziel wird. In der Handler-Funktion setzen wir die Klasse pending auf dem Kindelement, auf das die Eigenschaft snapTargetBlock verweist. Damit könnte es beim Auslösen des Ereignisses anders gestaltet werden.

js
document.addEventListener("scrollsnapchanging", (event) => {
  // remove previously-set "pending" classes
  const pendingElems = document.querySelectorAll(".pending");
  pendingElems.forEach((elem) => {
    elem.classList.remove("pending");
  });

  // Set current pending snap target class to "pending"
  event.snapTargetBlock.classList.add("pending");
});

Zu Beginn der Funktion wählen wir alle Elemente aus, denen zuvor die Klasse pending zugewiesen wurde, und entfernen sie. So wird nur das zuletzt vorgemerkte Snap-Ziel entsprechend gestaltet.

Spezifikationen

Spezifikation
CSS Scroll Snap Module Level 2
# scrollsnapchanging

Browser-Kompatibilität

Siehe auch