Lassen Sie sich benachrichtigen, wenn ein DOM-Element das Ansichtsfenster betritt oder verlässt. Ein kleines (ca. 1,9 KB komprimiertes), abhängigkeitsfreies Javascript-Dienstprogramm für IE9+.
camwiegert.github.io/in-view
Laden Sie entweder die neueste Version herunter und fügen Sie sie in Ihr Markup ein oder installieren Sie sie mit npm:
npm install --save in-view
Mit in-view können Sie Handler registrieren, die aufgerufen werden, wenn ein Element das Ansichtsfenster betritt oder verlässt . Jeder Handler erhält als einziges Argument ein Element, nämlich dasjenige, das in das Ansichtsfenster eintritt oder es verlässt.
inView ( '.someSelector' )
. on ( 'enter' , doSomething )
. on ( 'exit' , el => {
el . style . opacity = 0.5 ;
} ) ;
in-view verwaltet eine separate Handler-Registrierung für jeden Satz von Elementen, die mit inView(<selector>)
erfasst werden. Jede Registrierung stellt dieselben vier Methoden bereit. in-view macht außerdem vier Methoden der obersten Ebene verfügbar. ( is
, offset
, threshold
, test
).
Registrieren Sie einen Handler für die vom
selector
fürevent
ausgewählten Elemente. Die einzigen sichtbaren Ereignisse sind'enter'
und'exit'
.
inView ( '.someSelector' ) . on ( 'enter' , doSomething ) ;
Registrieren Sie einen Handler für die vom
selector
fürevent
ausgewählten Elemente.once
registrierte Handler werden nur einmal aufgerufen.
inView ( '.someSelector' ) . once ( 'enter' , doSomething ) ;
Überprüfen Sie, ob sich
element
im Ansichtsfenster befindet.
inView . is ( document . querySelector ( '.someSelector' ) ) ; // => true
Standardmäßig berücksichtigt In-View etwas im Ansichtsfenster, wenn es eine Kante des Ansichtsfensters durchbricht. Dies kann verwendet werden, um einen Versatz von dieser Kante festzulegen. Bei einem Versatz von
100
werden beispielsweise Elemente im Ansichtsfenster berücksichtigt, wenn sie eine Kante des Ansichtsfensters um mindestens100
Pixel unterbrechen.offset
kann eine positive oder negative ganze Zahl sein.
inView . offset ( 100 ) ; inView . offset ( - 50 ) ;
Der Offset kann auch pro Richtung festgelegt werden, indem ein Objekt übergeben wird.
inView . offset ( { top : 100 , right : 75 , bottom : 50 , left : 25 } ) ;
Legen Sie das Verhältnis der Höhe und Breite eines Elements fest, das sichtbar sein muss, damit es im Ansichtsfenster berücksichtigt wird. Der Standardwert ist
0
, also ein beliebiger Betrag. Ein Schwellenwert von0.5
oder1
erfordert, dass die Hälfte bzw. die gesamte Höhe und Breite eines Elements sichtbar sein muss.threshold
muss eine Zahl zwischen0
und1
sein.inView . threshold ( 0 ) ; inView . threshold ( 0.5 ) ; inView . threshold ( 1 ) ;
Überschreiben Sie die standardmäßigen Sichtbarkeitskriterien von In-View mit einer benutzerdefinierten Funktion. Diese Funktion erhält das Element und das Optionsobjekt als einzige zwei Argumente. Gibt
true
zurück, wenn ein Element als sichtbar betrachtet werden soll, andernfallsfalse
.inView . test ( ( el , options ) => { // ... } ) ;
Überprüfen Sie manuell den Status der vom
selector
ausgewählten Elemente. Standardmäßig werden alle Registrierungen beiscroll
,resize
undload
-Ereignissen deswindow
überprüft.
inView ( '.someSelector' ) . check ( ) ;
Manuelles Ausgeben
event
für jedes einzelne Element.
inView ( '.someSelector' ) . emit ( 'exit' , document . querySelectorAll ( '.someSelector' ) [ 0 ] ) ;
in-view unterstützt alle modernen Browser und IE9+.
Als kleine Einschränkung verwendet in-view MutationObserver, um die Sichtbarkeit registrierter Elemente nach einer DOM-Mutation zu überprüfen. Wenn Sie diese Funktionalität in IE9-10 benötigen, sollten Sie die Verwendung einer Polyfüllung in Betracht ziehen.
Jede Bibliothek, die Scroll-Ereignisse überwacht, läuft Gefahr, die Seitenleistung zu beeinträchtigen. Um dies zu mildern, registriert in-view derzeit nur einen einzigen, gedrosselten (maximal alle 100 ms) Ereignis-Listener für jedes load
, resize
und scroll
-Ereignis von window
und verwendet diese, um eine Prüfung für jede Registrierung durchzuführen.
Es gibt eine neue Browser-API, IntersectionObserver
, die Entwicklern eine leistungsstarke Möglichkeit bieten soll, die Sichtbarkeit von DOM-Elementen zu überprüfen. Künftig wird in-view darauf abzielen, an IntersectionObserver
zu delegieren, wenn dies unterstützt wird, und nur bei Bedarf auf Abfragen zurückzugreifen.
Lizenz MIT