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

View in English Always switch to English

IntersectionObserver: scrollMargin-Eigenschaft

Limited availability

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

Die scrollMargin-Eigenschaft der IntersectionObserver-Schnittstelle fügt allen verschachtelten Scroll-Containern innerhalb des Root-Elements einen Rand hinzu, einschließlich des Root-Elements, wenn es sich um einen Scroll-Container handelt.

Dies vergrößert oder verkleinert das Beschneidungsrechteck der scrollbaren Container, bevor Schnittpunkte berechnet werden. So können Sie beispielsweise die Grenzen des Scroll-Containers anpassen, sodass das Ziel-Element als sichtbar gilt, auch wenn seine Pixel noch nicht im Ansichtsfenster des Containers angezeigt werden, oder das Ziel als teilweise verborgen behandeln, wenn eine Kante zu nah an der Begrenzungskante des Containers liegt.

Beachten Sie, dass, wenn das Root-Element auch ein scrollbarer Container ist, dann scrollMargin und rootMargin kombiniert werden, um das effektive Begrenzungsrechteck zu bestimmen, das für die Berechnung der Schnittpunkte mit dem Ziel verwendet wird.

Für weitere Informationen siehe Das Schnittwurzel- und Root-Margin in der API-Übersicht.

Wert

Ein String, der ähnlich wie der Wert der CSS-margin-Eigenschaft formatiert ist.

Der angegebene Rand definiert Versätze für eine oder mehrere Seiten eines Scroll-Container-Beschneidungsrechtecks. Wenn scrollMargin nicht beim Erstellen des Objekts angegeben wurde, ist der Standardwert der String "0px 0px 0px 0px".

Beispiel

Karussell mit Scroll-Margin

Dieses Beispiel definiert ein scrollbares Feld (das Root-Element), das ein Bildkarussell enthält, das zunächst außerhalb der Ansicht liegt. Ein Beobachter auf dem Root-Element beobachtet die Bild-Element-Ziele innerhalb des Karussells. Wenn ein Bildelement beginnt, mit dem Root-Element zu schneiden, wird das Bild geladen, die Schnittstelle protokolliert und der Beobachter entfernt.

Das Beispiel ermöglicht Ihnen, die scrollMargin zu ändern, um zu sehen, wie sich dies ändert, wenn Ziele innerhalb des scrollbaren Containers des Karussells zu schneiden beginnen.

HTML

Der unten stehende Code definiert das root-container <div>-Element, das wir als Root-Element des Intersection Observer verwenden werden. Dieses enthält wiederum ein <p>-Element, das verwendet wird, um die anderen Elemente "standardmäßig" aus der Ansicht zu schieben, ein carousel-<div>, und einen margin-indicator (der verwendet wird, um die Größe des auf scrollbare Elemente innerhalb des Root-Elements angewendeten Randes anzuzeigen).

Die <img>-Elemente innerhalb des Karussells haben ein data-src-Attribut, das einen Dateinamen enthält. In unserem Beobachtercode werden wir dieses Attribut verwenden, um die img.src zu setzen, wenn jedes Bild beginnt, mit dem Root-Element zu schneiden, was das Bild lädt.

html
html

CSS

css

JavaScript

Der erste Teil des Codes definiert die Funktion createImageObserver(), die wir verwenden, um IntersectionObserver-Objekte zu erstellen und der imageObserver-Variablen zuzuweisen. Wir verwenden eine Funktion, weil Beobachteroptionen nach der Konstruktion nicht geändert werden können und wir die Auswirkungen unterschiedlicher scrollMargin-Werte demonstrieren möchten.

Der IntersectionObserver wird erstellt ohne rootMargin, mit einem nahezu null threshold und einer scrollMargin, die ihren Wert vom margin-Eingang nimmt und die auf alle Seiten des Scroll-Containers angewendet wird.

Der Callback wird für alle beobachteten Ziele aufgerufen. Für überlappende Ziele setzt er die img.src auf den Namen des zu ladenden Bildes (aus dem img.dataset.src), protokolliert die Schnittstelle und hört dann auf, das Bild zu beobachten.

Der Code am Ende der Funktion ruft IntersectionObserver.observe() für jedes Bild auf, um den Beobachter zu starten.

js

Der folgende Code erstellt den Beobachter mit createImageObserver() beim Start und jedes Mal, wenn der margin-Eingabewert geändert wird. Wenn die IntersectionObserver-Schnittstelle nicht unterstützt wird, werden alle Bilder sofort geladen.

js

Ergebnisse

Scrollen Sie nach unten, um das Karussell anzuzeigen. Die sichtbaren Bilder sollten sofort geladen werden. Wenn Sie das Karussell nach rechts scrollen, sollten Sie beobachten, dass die Bilder geladen werden, sobald das Element sichtbar wird.

Sie können die bereitgestellte Steuerung verwenden, um den Scroll-Margin-Prozentsatz zu ändern (nach dem Zurücksetzen des Beispiels). Wenn Sie einen positiven Wert wie 20px festlegen, wird das Clip-Rechteck des Scroll-Containers um 20px vergrößert, und Sie sollten beobachten, dass Bilder erkannt und geladen werden, bevor sie in die Ansicht kommen. Ein negativer Wert bedeutet ähnlich, dass die Schnittstelle erkannt wird, sobald Bilder bereits in der Ansicht sind.

Spezifikationen

This feature does not appear to be defined in any specification.

Browser-Kompatibilität