Hier ist meine reine JavaScript-Lösung, die auch funktioniert, wenn sie in einem scrollbaren Container versteckt ist.
Demo hier (versuchen Sie auch, die Größe des Fensters zu ändern)
var visibleY = function(el){
var rect = el.getBoundingClientRect(), top = rect.top, height = rect.height,
el = el.parentNode
// Check if bottom of the element is off the page
if (rect.bottom < 0) return false
// Check its within the document viewport
if (top > document.documentElement.clientHeight) return false
do {
rect = el.getBoundingClientRect()
if (top <= rect.bottom === false) return false
// Check if the element is out of view due to a container scrolling
if ((top + height) <= rect.top) return false
el = el.parentNode
} while (el != document.body)
return true
};
EDIT 2016-03-26: Ich habe die Lösung aktualisiert, um für das Scrollen über das Element zu berücksichtigen, so dass es über den oberen Rand des scrollbaren Containers versteckt ist. EDIT 2018-10-08: Aktualisiert, um zu behandeln, wenn aus der Ansicht über dem Bildschirm gescrollt wird.
0 Stimmen
Ich verstehe das Problem nicht wirklich. Könnten Sie versuchen, mehr Informationen hinzuzufügen?
61 Stimmen
Bedeutet, dass er eine Methode haben möchte, um zu wissen, ob ein bestimmtes Element im Browserfenster angezeigt wird oder ob der Benutzer scrollen muss, um es zu sehen.
1 Stimmen
Um zu prüfen, ob ein Element in einem Container vollständig sichtbar ist, fügen Sie einfach einen zusätzlichen Selektor-Parameter hinzu und verwenden Sie den Code von elem dafür wieder.
Library.IsElementVisibleInContainer = function (elementSelector, containerSelector) { var containerViewTop = $(containerSelector).offset().top; var containerViewBottom = containerViewTop + $(containerSelector).height();
0 Stimmen
Was ist diese "Bibliothek", @Lindsay?
4 Stimmen
Mögliche Duplikate von Wie kann man feststellen, ob ein DOM-Element im aktuellen Viewport sichtbar ist?
0 Stimmen
Die Bibliothek ist nur eine Funktion, die ich erstellt habe. Z.B..
function Library() { }
. Ich schreibe mein Javascript auf diese Weise, weil ich es einfacher zu lesen / pflegen gegenüber nur mit einer Funktion (z. B. IsElementVisibleInContainer) und haben keine Ahnung, woher es kam.0 Stimmen
Schnittpunkt Beobachter wird die Antwort sein... aber noch nicht ganz, es sei denn, Sie verwenden ein Polyfill für Safari und IE. Observer ist eine neue Version von Event. Dies wird einen Rückruf auslösen, wenn nn% des Elements sichtbar ist. Siehe developer.mozilla.org/de-US/docs/Web/API/
1 Stimmen
Mögliches Duplikat von Wie kann man feststellen, ob ein DOM-Element im aktuellen Ansichtsfenster sichtbar ist?
4 Stimmen
Alle Antworten lösen Reflow aus, es könnte also ein Flaschenhals sein. IntersectionObserver falls unterstützt. Auf modernen Browsern wird die Leistung besser sein,
0 Stimmen
Eine fertige, nicht-perfekte Lösung ist hier: github.com/proxy-m/real-visibility
0 Stimmen
Verwenden Sie die Schnittpunkt-Beobachter-API, um zu erkennen, ob sich ein Element im Ansichtsfenster befindet, Details hier - frontendguruji.com/blog/