Gibt es eine effiziente Methode, um festzustellen, ob ein DOM-Element (in einem HTML-Dokument) derzeit sichtbar ist (erscheint in der Ansichtsfenster )?
(Die Frage bezieht sich auf Firefox.)
Gibt es eine effiziente Methode, um festzustellen, ob ein DOM-Element (in einem HTML-Dokument) derzeit sichtbar ist (erscheint in der Ansichtsfenster )?
(Die Frage bezieht sich auf Firefox.)
Hier ist eine Funktion, die feststellt, ob ein Element im aktuellen Viewport einer Elternteil Element:
function inParentViewport(el, pa) {
if (typeof jQuery === "function"){
if (el instanceof jQuery)
el = el[0];
if (pa instanceof jQuery)
pa = pa[0];
}
var e = el.getBoundingClientRect();
var p = pa.getBoundingClientRect();
return (
e.bottom >= p.top &&
e.right >= p.left &&
e.top <= p.bottom &&
e.left <= p.right
);
}
Eine bessere Lösung:
function getViewportSize(w) {
var w = w || window;
if(w.innerWidth != null)
return {w:w.innerWidth, h:w.innerHeight};
var d = w.document;
if (document.compatMode == "CSS1Compat") {
return {
w: d.documentElement.clientWidth,
h: d.documentElement.clientHeight
};
}
return { w: d.body.clientWidth, h: d.body.clientWidth };
}
function isViewportVisible(e) {
var box = e.getBoundingClientRect();
var height = box.height || (box.bottom - box.top);
var width = box.width || (box.right - box.left);
var viewport = getViewportSize();
if(!height || !width)
return false;
if(box.top > viewport.h || box.bottom < 0)
return false;
if(box.right < 0 || box.left > viewport.w)
return false;
return true;
}
Sie sollten versuchen zu erklären, warum Ihre Version besser ist. So wie es aussieht, sieht es mehr oder weniger genauso aus wie die anderen Lösungen.
Das ist die einfache und kleine Lösung, die bei mir funktioniert hat.
Beispiel : Sie möchten sehen, ob das Element in dem übergeordneten Element, das einen Überlauf hat, sichtbar ist.
$(window).on('scroll', function () {
var container = $('#sidebar');
var containerHeight = container.height();
var scrollPosition = $('#row1').offset().top - container.offset().top;
if (containerHeight < scrollPosition) {
console.log('not visible');
} else {
console.log('visible');
}
})
Damit wird geprüft, ob ein Element zumindest teilweise im Blickfeld ist (vertikale Dimension):
function inView(element) {
var box = element.getBoundingClientRect();
return inViewBox(box);
}
function inViewBox(box) {
return ((box.bottom < 0) || (box.top > getWindowSize().h)) ? false : true;
}
function getWindowSize() {
return { w: document.body.offsetWidth || document.documentElement.offsetWidth || window.innerWidth, h: document.body.offsetHeight || document.documentElement.offsetHeight || window.innerHeight}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Es kommt darauf an, was Sie unter sichtbar verstehen. Wenn Sie meinen, dass es derzeit auf der Seite angezeigt wird, können Sie es anhand des y-Offsets des Elements und der aktuellen Bildlaufposition berechnen.
1 Stimmen
Ich habe hinzugefügt meine eigene Lösung die dieses Problem löst
1 Stimmen
Berücksichtigt eine dieser Lösungen den Z-Index eines Dom-Knotens und wie das die Sichtbarkeit speziell durch möglicherweise Ausblenden von Elementen mit einem niedrigeren Z-Index beeinflussen könnte?
1 Stimmen
Keine der angebotenen Antworten funktioniert mit absolut positionierten Elementen.
1 Stimmen
Eine Antwort für 2019: IntersectionObserver
3 Stimmen
Es gibt eine Million Antworten und die meisten sind lächerlich lang. Siehe hier für einen Zweizeiler
0 Stimmen
Verwenden Sie die Schnittpunkt-Beobachter-API, um zu erkennen, ob sich ein Element im Ansichtsfenster befindet, Details hier - frontendguruji.com/blog/
0 Stimmen
Zusätzlich zu den Antworten auf die Fragen von Intersection Observer eignet sich dieser Visualizer hervorragend für die Konfiguration der Variablen für Intersection Observer: codepen.io/michellebarker/pen/xxwLpRG