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 vor der Verwendung auf produktiven Webseiten.

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

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
scrollsnapchanging event
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.

Siehe auch