Ich lade Elemente über AJAX. Einige von ihnen sind nur sichtbar, wenn Sie die Seite nach unten scrollen.
Kann ich auf irgendeine Weise feststellen, ob sich ein Element jetzt im sichtbaren Teil der Seite befindet?
javascript
jquery
scroll
yoavf
quelle
quelle
Library.IsElementVisibleInContainer = function (elementSelector, containerSelector) { var containerViewTop = $(containerSelector).offset().top; var containerViewBottom = containerViewTop + $(containerSelector).height();
Antworten:
Dies sollte den Trick tun:
Einfache Dienstprogrammfunktion Mit dieser Funktion können Sie eine Dienstprogrammfunktion aufrufen, die das gesuchte Element akzeptiert und wenn das Element vollständig oder teilweise angezeigt werden soll.
Verwendungszweck
quelle
window.innerHeight
stattdessen benutzteelemTop
ich habe benutzt$(elem).position().top
und fürelemBottom
ich habe benutztelemTop + $(elem).outerHeight(true)
.Diese Antwort in Vanille:
quelle
isVisible = elementTop < window.innerHeight && elementBottom >= 0
? Andernfalls gibt eine Elementhälfte auf dem Bildschirm false zurück.Update: Verwenden Sie IntersectionObserver
Die beste Methode, die ich bisher gefunden habe, ist das jQuery-Plugin . Klappt wunderbar.
quelle
appear plugin
und Sie müssen wahrscheinlich nur!
irgendwo hinzufügen , um eindisappear
Plugin zu bekommen .Hier ist meine reine JavaScript-Lösung, die funktioniert, wenn sie auch in einem scrollbaren Container versteckt ist.
Demo hier (versuchen Sie auch die Größe des Fensters zu ändern)
EDIT 2016-03-26: Ich habe die Lösung aktualisiert, um das Scrollen am Element vorbei zu berücksichtigen, sodass es über dem oberen Rand des scrollbaren Containers verborgen ist. BEARBEITEN 2018-10-08: Aktualisiert, um zu handhaben, wenn über dem Bildschirm aus der Ansicht gescrollt wird.
quelle
return top <= document.documentElement.clientHeight && top >= 0;
Verwenden der IntersectionObserver- API (nativ in modernen Browsern)
Mithilfe eines Beobachters können Sie einfach und effizient feststellen, ob ein Element im Ansichtsfenster oder in einem scrollbaren Container sichtbar ist .
Das Anhängen eines
scroll
Ereignisses und das manuelle Überprüfen des Ereignisrückrufs entfällt, sodass die Effizienz entfällt:Unterstützungstabelle für Browser anzeigen (in IE / Safari nicht unterstützt)
quelle
Das jQuery Waypoints Plugin funktioniert hier sehr gut.
Es gibt einige Beispiele auf der Seite des Plugins .
quelle
$('#my-div').waypoint(function() { console.log('Hello there!'); }, { offset: '100%' });
Wie wäre es mit
Danach können Sie auslösen, was Sie wollen, sobald das Element so angezeigt wird
Das funktioniert bei mir ganz gut
quelle
WebResourcesDepot hat vor einiger Zeit ein Skript zum Laden beim Scrollen geschrieben , das jQuery verwendet . Sie können ihre Live-Demo hier ansehen . Das Rindfleisch ihrer Funktionalität war folgendes:
quelle
Tweeked Scott Dowding's coole Funktion für meine Anforderung - diese wird verwendet, um herauszufinden, ob das Element gerade in den Bildschirm gescrollt hat, dh seine Oberkante.
quelle
Einfache Vanille, um zu überprüfen, ob element (
el
) in scrollbarem div (holder
) sichtbar istVerwendung mit jQuery:
quelle
isScrolledIntoView ist eine sehr notwendige Funktion, daher habe ich sie ausprobiert. Sie funktioniert für Elemente, die nicht höher als das Ansichtsfenster sind. Wenn das Element jedoch größer als das Ansichtsfenster ist, funktioniert es nicht. Um dies zu beheben, ändern Sie einfach den Zustand
dazu:
Siehe Demo hier: http://jsfiddle.net/RRSmQ/
quelle
Die meisten Antworten hier berücksichtigen nicht, dass ein Element auch ausgeblendet werden kann, da es nicht nur für die gesamte Seite, sondern auch für ein Div gescrollt wird.
Um diese Möglichkeit abzudecken, müssen Sie grundsätzlich überprüfen, ob das Element innerhalb der Grenzen der einzelnen übergeordneten Elemente positioniert ist.
Diese Lösung macht genau das:
Außerdem können Sie festlegen, zu welchem Prozentsatz es in jeder Richtung sichtbar sein muss.
Es wird nicht die Möglichkeit abgedeckt, dass es aufgrund anderer Faktoren, wie z
display: hidden
.Dies sollte in allen gängigen Browsern funktionieren, da es nur verwendet wird
getBoundingClientRect
. Ich habe es persönlich in Chrome und Internet Explorer 11 getestet.quelle
quelle
Hier ist eine weitere Lösung von http://web-profile.com.ua/
Sehen Sie es in JSFiddle
quelle
Dies berücksichtigt alle Auffüllungen, Ränder oder Ränder des Elements sowie Elemente, die größer als das Ansichtsfenster selbst sind.
Um es zu nennen, verwenden Sie so etwas:
quelle
Für jQuery gibt es ein Plugin namens inview, das ein neues "inview" -Ereignis hinzufügt.
Hier ist ein Code für ein jQuery-Plugin, das keine Ereignisse verwendet:
Ich fand dies in einem Kommentar hier ( http://remysharp.com/2009/01/26/element-in-view-event-plugin/ ) von einem Kerl namens James
quelle
Ich musste die Sichtbarkeit von Elementen im scrollbaren DIV-Container überprüfen
quelle
e.style.opacity > 0
,(!e.style.opacity || e.style.opacity > 0)
da es standardmäßig die leere Zeichenfolge für mich in FF ist.Aufbauend auf dieser großartigen Antwort können Sie sie mit ES2015 + ein wenig weiter vereinfachen:
Wenn Sie sich nicht darum kümmern, dass die Oberseite aus dem Fenster geht, und nur darum, dass die Unterseite angezeigt wird, kann dies vereinfacht werden
oder sogar der Einzeiler
quelle
Sie können das jquery-Plugin "onScreen" verwenden, um zu überprüfen, ob sich das Element beim Scrollen im aktuellen Ansichtsfenster befindet. Das Plugin setzt das ": onScreen" des Selektors auf true, wenn der Selektor auf dem Bildschirm angezeigt wird. Dies ist der Link für das Plugin, das Sie in Ihr Projekt aufnehmen können. " http://benpickles.github.io/onScreen/jquery.onscreen.min.js "
Sie können das folgende Beispiel ausprobieren, das für mich funktioniert.
HTML Quelltext:
CSS:
quelle
Ich habe eine solche Methode in meiner Anwendung, aber sie verwendet jQuery nicht:
Bearbeiten: Diese Methode funktioniert gut für IE (mindestens Version 6). Lesen Sie die Kommentare zur Kompatibilität mit FF.
quelle
var visibleBottom = visibleTop + window.innerHeight;
Ich verwende jQuery nicht und Sie haben mir geholfen, die richtige Antwort zu finden.Wenn Sie dies für das Scrollen eines Elements in einem anderen Div optimieren möchten,
quelle
Die akzeptierte Antwort wurde so geändert, dass für das Element die Anzeigeeigenschaft auf etwas anderes als "keine" festgelegt werden muss, damit die Qualität sichtbar wird.
quelle
Hier ist eine Möglichkeit, mit Mootools dasselbe zu erreichen, horizontal, vertikal oder beides.
quelle
Ein Beispiel basierend auf dieser Antwort , um zu überprüfen, ob ein Element zu 75% sichtbar ist (dh weniger als 25% davon sind außerhalb des Bildschirms).
quelle
Es gibt über 30 Antworten auf diese Frage, und keine von ihnen verwendet die erstaunlich einfache, reine JS-Lösung, die ich verwendet habe. Es ist nicht erforderlich, jQuery zu laden, um dies zu lösen, da viele andere darauf drängen.
Um festzustellen, ob sich das Element im Ansichtsfenster befindet, müssen wir zuerst die Position der Elemente innerhalb des Körpers bestimmen. Wir müssen dies nicht rekursiv tun, wie ich einmal dachte. Stattdessen können wir verwenden
element.getBoundingClientRect()
.Dieser Wert ist die Y-Differenz zwischen der Oberseite des Objekts und der Oberseite des Körpers.
Wir müssen dann feststellen, ob das Element in Sichtweite ist. Bei den meisten Implementierungen wird gefragt, ob sich das vollständige Element im Ansichtsfenster befindet. Daher werden wir dies behandeln.
Zuallererst ist die oberste Position des Fensters:
window.scrollY
.Wir können die untere Position des Fensters ermitteln, indem wir die Höhe des Fensters zu seiner oberen Position hinzufügen:
Erstellen Sie eine einfache Funktion, um die oberste Position des Elements zu ermitteln:
Diese Funktion gibt die oberste Position des Elements innerhalb des Fensters zurück oder sie wird zurückgegeben,
0
wenn Sie etwas anderes als ein Element mit dem übergeben.getBoundingClientRect()
Methode . Diese Methode gibt es schon lange, daher sollten Sie sich keine Sorgen machen müssen, dass Ihr Browser sie nicht unterstützt.Die oberste Position unseres Elements ist nun:
Die untere Position des Elements ist:
Jetzt können wir feststellen, ob sich das Element im Ansichtsfenster befindet, indem wir überprüfen, ob die untere Position des Elements niedriger als die obere Position des Ansichtsfensters ist und ob die obere Position des Elements höher als die untere Position des Ansichtsfensters ist:
Von dort aus können Sie die Logik ausführen, um eine
in-view
Klasse zu Ihrem Element hinzuzufügen oder zu entfernen , die Sie später mit Übergangseffekten in Ihrem CSS behandeln können.Ich bin absolut erstaunt, dass ich diese Lösung nirgendwo anders gefunden habe, aber ich glaube, dass dies die sauberste und effektivste Lösung ist und dass Sie jQuery nicht laden müssen!
quelle
Eine effizientere Version dieser Antwort :
quelle
Diese Methode gibt true zurück, wenn ein Teil des Elements auf der Seite sichtbar ist. In meinem Fall hat es besser funktioniert und kann jemand anderem helfen.
quelle
Einfache Änderung für scrollbares Div (Container)
HINWEIS: Dies funktioniert nicht, wenn das Element größer als das scrollbare div ist.
quelle
Ich habe diese kurze jQuery-Funktionserweiterung angepasst, die Sie gerne verwenden können (MIT-Lizenz).
quelle
Ich habe eine Komponente für diese Aufgabe geschrieben, die darauf ausgelegt ist, eine große Anzahl von Elementen extrem schnell zu verarbeiten (mit einer Geschwindigkeit von <10 ms für 1000 Elemente auf einem langsamen Mobiltelefon) ).
Es arbeitet mit jeder Art von Scroll - Container haben Sie Zugriff auf - Fenster, HTML - Elemente, eingebettet iframe, gelaicht Kind Fenster - und ist sehr flexibel, was es erkennt ( vollständige oder teilweise Sichtbarkeit , Grenzfeld oder Content - Box , individuelle Toleranzzone , usw. ).
Eine riesige, meist automatisch generierte Testsuite stellt sicher, dass sie wie angekündigt und browserübergreifend funktioniert .
Probieren Sie es aus, wenn Sie möchten : jQuery.isInView . Andernfalls finden Sie möglicherweise Inspiration im Quellcode, z . B. hier .
quelle