Bestimmen Sie mit JavaScript den Abstand vom oberen Rand eines „Div“ zum oberen Rand des Fensters
Lesezeit: 5 Minuten
Joel Eckroth
Wie bestimme ich den Abstand zwischen dem oberen Rand eines Divs und dem oberen Rand des aktuellen Bildschirms?
Ich möchte nur den Pixelabstand zum oberen Rand des aktuellen Bildschirms, nicht zum oberen Rand des Dokuments. Ich habe ein paar Dinge ausprobiert, z .offset() Und .offsetHeightaber ich komme einfach nicht damit klar.
@caub Eh, es ist einfach el.getBoundingClientRect().top. Durch Hinzufügen der Bildlaufposition ergibt sich der Abstand zum oberen Rand des Dokuments. Developer.mozilla.org/de/docs/Web/API/Element/…
– Stewo
30. November 2016 um 21:17 Uhr
Ja richtig, ich wollte nur die Abfrage aufheben
– kaub
30. November 2016 um 22:09
Sie können verwenden .offset() um den Offset im Vergleich zum zu erhalten document Element und verwenden Sie dann das scrollTop Eigentum der window Element, um herauszufinden, wie weit der Benutzer auf der Seite nach unten gescrollt hat:
Beachten Sie, dass negative Werte bedeuten, dass sich das Element über der oberen Falte befindet.
Wie kann ich überprüfen, ob es sich bei der Entfernung um eine bestimmte Zahl handelt? Ich möchte ein Element klebrig machen, wenn es 120 Pixel von der Oberseite entfernt ist
– Thessa Verbruggen
31. Okt. 2019 um 16:57 Uhr
@ThessaVerbruggen Sie können das überprüfen distance Variable, um zu sehen, ob ihr Wert vorhanden ist 120 Ich würde jedoch empfehlen, nach einem Bereich statt nach einer genauen Zahl zu suchen. Wenn Sie zum Beispiel mit einem Mausrad scrollen, können Sie durchaus über 120 hinwegspringen. Wenn Sie also versuchen, CSS oder etwas Ähnliches anzuwenden, während sich das Element innerhalb von 120 Pixeln von der oberen Falte befindet, dann verwenden Sie vielleicht if (distance < 120) { /* do something */}. Hier ist eine aktualisierte Demo: jsfiddle.net/na5qL91o
– Jaspis
31. Okt. 2019 um 22:55 Uhr
Ein Problem, wenn ich das mache: Der klebrige Teil blinkt, wenn ich scrolle. Ich vermute, weil es neu berechnet wird, wenn ich scrolle. Irgendeine Idee, wie man das beheben kann? Mein Code: $(window).on(‘scroll’, function () { var scrollTop = $(window).scrollTop(), elementOffset = $(‘#secondary’).offset().top, distance = (elementOffset – scrollTop); if (distance < 120) { $('#secondary').addClass('sticky'); } else { $('#secondary').removeClass('sticky'); } });
– Thessa Verbruggen
4. November 2019 um 14:19 Uhr
Pratikno Rulianto
Vanille:
window.addEventListener('scroll', function(ev) {
var someDiv = document.getElementById('someDiv');
var distanceToTop = someDiv.getBoundingClientRect().top;
console.log(distanceToTop);
});
Öffnen Sie Ihre Browserkonsole und scrollen Sie auf Ihrer Seite, um die Entfernung anzuzeigen.
Dies funktioniert nur, wenn der Benutzer die Seite nicht gescrollt hat. Ansonsten distanceToTop zurückgegeben ist relativ (kann sogar negativ sein, wenn der Benutzer vorbei gescrollt hat). Um dies zu berücksichtigen, verwenden Sie window.pageYOffset + someDiv.getBoundingClientRect().top
– Ty.
1. September 2018 um 18:27 Uhr
@ty Das OP sucht nach dem Abstand zum oberen Bildschirmrand, nicht zum oberen Rand des Dokuments – in diesem Fall wäre ein negativer Wert gültig
– Drenai
25. März 2019 um 19:54
Das ist es auch, was ich brauchte. Ich verwende die von Vue geröstete Bibliothek und sie erlaubt nur die Anzeige der Toasts an absoluten Positionen auf dem Bildschirm. Ich wollte, dass der Toast in der Nähe der Schaltfläche angezeigt wird, auf die ich in einer Tabelle geklickt habe, und musste letztendlich getBoundingClientRect().top in einem Scroll-Ereignis verwenden. Dasselbe habe ich auch bei einem Größenänderungsereignis gemacht. Vielleicht möchten Sie das hinzufügen, wenn Sie den Abstand zum oberen Bildschirmrand wie folgt berechnen – man weiß nie, was der Client am Ende tun wird.
– der Typ
13. März 2021 um 23:20 Uhr
@ty. In der Zwischenzeit window.pageYOffset ist veraltet. Bessere Nutzung window.scrollY.
– Tom Böttger
22. Dezember 2021 um 21:14 Uhr
@ty. So hilfreich!
– Franco Maldonado
24. März um 15:56
Furqan Rahamath
Dies kann erreicht werden rein mit JavaScript.
Ich sehe, dass die Antwort, die ich schreiben wollte, von Lynx in den Kommentaren zur Frage beantwortet wurde.
Aber ich werde trotzdem eine Antwort schreiben, denn genau wie ich vergessen die Leute manchmal, die Kommentare zu lesen.
Wenn Sie also nur den Abstand eines Elements (in Pixel) vom oberen Rand Ihres Bildschirmfensters ermitteln möchten, müssen Sie Folgendes tun:
// Fetch the element
var el = document.getElementById("someElement");
Einfach tolle Arbeit @MohammedFurqanRahamathM. Vielen Dank für deine Antwort 🙂 Es funktioniert wie ein Zauber!! 🙂 🙂
– KodeFor.Me
18. Juli 2018 um 10:43
@MerianosNikos Danke. Ich bin froh, dass es geholfen hat 🙂
– Furqan Rahamath
20. Juli 2018 um 7:32 Uhr
Aber das würde nur funktionieren, wenn Sie nicht in der Mitte der Seite neu geladen haben, oder?
– Sagiv
14. Juli 2019 um 14:42 Uhr
@SagiveSEO Ich habe es nicht verstanden. Könnten Sie bitte Ihre Frage näher erläutern?
– Furqan Rahamath
15. Juli 2019 um 6:46
T.Todua
Ich habe Folgendes verwendet:
myElement = document.getElemenById("xyz");
Get_Offset_From_Start ( myElement ); // returns positions from website's start position
Get_Offset_From_CurrentView ( myElement ); // returns positions from current scrolled view's TOP and LEFT
Code:
function Get_Offset_From_Start (object, offset) {
offset = offset || {x : 0, y : 0};
offset.x += object.offsetLeft; offset.y += object.offsetTop;
if(object.offsetParent) {
offset = Get_Offset_From_Start (object.offsetParent, offset);
}
return offset;
}
function Get_Offset_From_CurrentView (myElement) {
if (!myElement) return;
var offset = Get_Offset_From_Start (myElement);
var scrolled = GetScrolled (myElement.parentNode);
var posX = offset.x - scrolled.x; var posY = offset.y - scrolled.y;
return {lefttt: posX , toppp: posY };
}
//helper
function GetScrolled (object, scrolled) {
scrolled = scrolled || {x : 0, y : 0};
scrolled.x += object.scrollLeft; scrolled.y += object.scrollTop;
if (object.tagName.toLowerCase () != "html" && object.parentNode) { scrolled=GetScrolled (object.parentNode, scrolled); }
return scrolled;
}
/*
// live monitoring
window.addEventListener('scroll', function (evt) {
var Positionsss = Get_Offset_From_CurrentView(myElement);
console.log(Positionsss);
});
*/
Moutasim Ahmad
Ich habe diese Funktion verwendet, um zu erkennen, ob das Element im Ansichtsfenster sichtbar ist.
Sie möchten vielleicht Schauen Sie sich das an
– Joseph
26. März 2012 um 21:59
el.getBoundingClientRect().top+window.scrollY
– kaub
29. Januar 2016 um 19:43
@caub Eh, es ist einfach
el.getBoundingClientRect().top
. Durch Hinzufügen der Bildlaufposition ergibt sich der Abstand zum oberen Rand des Dokuments. Developer.mozilla.org/de/docs/Web/API/Element/…– Stewo
30. November 2016 um 21:17 Uhr
Ja richtig, ich wollte nur die Abfrage aufheben
– kaub
30. November 2016 um 22:09