Window: scrollsnapchanging-Ereignis

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Das scrollsnapchanging-Ereignis der Window-Schnittstelle wird auf dem window ausgelöst, wenn der Browser feststellt, dass ein neues Ziel für den Scroll-Snap in Vorbereitung ist, d. h., es wird ausgewählt, wenn die aktuelle Scroll-Geste endet.

Dieses Ereignis funktioniert in ähnlicher Weise wie das scrollsnapchanging-Ereignis der Element-Schnittstelle, außer dass das gesamte HTML-Dokument als Scroll-Snap-Container festgelegt sein muss (d. h. scroll-snap-type ist auf dem <html>-Element gesetzt).

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Eigenschaft für den Ereignishandler.

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

onscrollsnapchanging = (event) => {};

Ereignistyp

Ein SnapEvent, der vom generischen Event-Typ erbt.

Beispiele

Grundlegende Verwendung

Angenommen, wir haben ein <main>-Element, das signifikanten Inhalt enthält, der zum Scrollen führt:

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

Das <main>-Element kann mit einer Kombination von CSS-Eigenschaften in einen Scroll-Container verwandelt werden, zum Beispiel:

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

Wir können dann das Verhalten des Scroll-Snap auf dem scrollenden Inhalt implementieren, indem wir die Eigenschaft scroll-snap-type auf dem <html>-Element angeben:

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 Kind des <main>-Elements ein Ziel für den Snap wird. In der Handler-Funktion setzen wir eine pending-Klasse auf das Kind, das durch die snapTargetBlock-Eigenschaft referenziert wird, die verwendet werden könnte, um es anders zu stylen, wenn das Ereignis ausgelöst wird.

js
window.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, die zuvor die pending-Klasse angewendet hatten, und entfernen sie, so dass nur das neueste Ziel für den Snap gestylt wird.

Spezifikationen

Specification
CSS Scroll Snap Module Level 2
# scrollsnapchanging

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch