Ich möchte wissen, wie man JavaScript verwendet, um die Entfernung eines Elements zu erhalten oben auf der Seite, nicht das übergeordnete Element.
Wie bekomme ich den Abstand von oben für ein Element?
Sami Al-Subhi
var elDistanceToTop = window.pageYOffset + el.getBoundingClientRect().top
Durch meine Erfahrung document.body.scrollTop
gibt nicht immer die aktuelle Bildlaufposition zurück (z. B. wenn das Bildlauf tatsächlich auf einem anderen Element stattfindet).
-
Im Gegensatz zur Top-Antwort funktioniert dies auf iOS Safari. Verwenden Sie nicht 2 Stunden zum Debuggen wie ich 🙂
– Markus T.
19. April 2020 um 19:38 Uhr
-
@Sami Al-Subhi dies sollte die ausgewählte Antwort sein.
– BBaysinger
22. Dezember 2020 um 23:01 Uhr
Shawn Winnery
offsetTop betrachtet nur das übergeordnete Element des Elements. Gehen Sie einfach durch die Elternknoten, bis Sie keine Eltern mehr haben, und addieren Sie ihre Offsets.
function getPosition(element) {
var xPosition = 0;
var yPosition = 0;
while(element) {
xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft);
yPosition += (element.offsetTop - element.scrollTop + element.clientTop);
element = element.offsetParent;
}
return { x: xPosition, y: yPosition };
}
UPDATE: Diese Antwort hat einige Probleme, die Werte weisen winzige Unterschiede zu dem auf, was sie sein sollten, und funktionieren in einigen Fällen nicht richtig.
Prüfen @eeglbalazs‘s Antwort, die korrekt ist.
-
Element wäre in diesem Fall so etwas wie:
var element = document.querySelectorAll('.wrapper')[0];
– Colton45
14. September 2017 um 0:34 Uhr
-
wahnsinnig nützlich!
– Rok Sprogar
7. Oktober 2017 um 19:13 Uhr
-
@Colton45 eigentlich solltest du verwenden
document.querySelector('.wrapper')
– Guilherme Nagatomo
21. Dezember 2017 um 15:59 Uhr
-
Nur um das noch hinzuzufügen, diese Implementierung funktioniert in Safari nicht genauso wie in Chrome – daher würde ich argumentieren, dass sie nicht akzeptiert werden sollte. Hier ist eine Demo (scrollen Sie in beiden Browsern): codepen.io/anon/pen/LaKEPK. Diese Implementierung stackoverflow.com/a/53351648/775007 funktioniert.
– Dekan
27. März 2019 um 13:46 Uhr
-
@Dean Bist du dir da sicher? Es funktioniert für mich in jedem Browser und Betriebssystem, das ich zur Verfügung habe. Ich denke, Sie haben sich vielleicht verwirrt, indem Sie vh-Einheiten in Ihrem CSS lol verwenden. codepen.io/anon/pen/zXqqbP
– Shawn Winnery
4. April 2019 um 17:48 Uhr
Hier ist ein interessanter Code für Sie 🙂
window.addEventListener('load', function() {
//get the element
var elem = document.getElementById('test');
//get the distance scrolled on body (by default can be changed)
var distanceScrolled = document.body.scrollTop;
//create viewport offset object
var elemRect = elem.getBoundingClientRect();
//get the offset from the element to the viewport
var elemViewportOffset = elemRect.top;
//add them together
var totalOffset = distanceScrolled + elemViewportOffset;
//log it, (look at the top of this example snippet)
document.getElementById('log').innerHTML = totalOffset;
});
#test {
width: 100px;
height: 100px;
background: red;
margin-top: 100vh;
}
#log {
position: fixed;
top: 0;
left: 0;
display: table;
background: #333;
color: #fff;
}
html,
body {
height: 2000px;
height: 200vh;
}
<div id="log"></div>
<div id="test"></div>
Sachleen
Ossaija Gott sei Dank
offsetTop erhält nicht den Abstand zum oberen Rand der Seite, sondern zum oberen Rand des nächsten übergeordneten Elements, das eine bestimmte Position hat.
Sie können eine einfache Technik verwenden, bei der offsetTop aller übergeordneten Elemente des Elements, an dem Sie interessiert sind, addiert wird, um den Abstand zu ermitteln.
// Our element
var elem = document.querySelector('#some-element');
// Set our distance placeholder
var distance = 0;
// Loop up the dom
do {
// Increase our distance counter
distance += elem.offsetTop;
// Set the element to it's parent
elem = elem.offsetParent;
} while (elem);
distance = distance < 0 ? 0 : distance;
Originalcode von https://gomakethings.com/how-to-get-an-elements-distance-from-the-top-of-the-page-with-vanilla-javascript/
-
Für Google ist es surreal, wie man etwas tut und eine StackOverflow-Antwort entdeckt, die auf einen Artikel verweist, den SIE geschrieben haben. LOL danke dafür!
– Chris Ferdinandi
12. März 2019 um 14:59 Uhr
Fanky
Dieser Oneliner scheint gut zu funktionieren
document.getElementById("el").getBoundingClientRect().top + window.scrollY
-
Für Google ist es surreal, wie man etwas tut und eine StackOverflow-Antwort entdeckt, die auf einen Artikel verweist, den SIE geschrieben haben. LOL danke dafür!
– Chris Ferdinandi
12. März 2019 um 14:59 Uhr
4b0
var distanceTop = element.getBoundingClientRect().top;
Für Details besuchen Sie einen Link:
https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect
-
Ein Link zu einer Lösung ist willkommen, aber stellen Sie bitte sicher, dass Ihre Antwort ohne ihn nützlich ist: Kontext um den Link hinzufügen damit Ihre Mitbenutzer eine Vorstellung davon haben, was es ist und warum es dort ist, zitieren Sie dann den relevantesten Teil der Seite, auf die Sie verlinken, falls die Zielseite nicht verfügbar ist. Antworten, die kaum mehr als ein Link sind, können gelöscht werden.
– Filnor
16. März 2018 um 9:41 Uhr
-
Dies gibt nicht die tatsächliche Höhe von oben an. Es gibt die Höhe von oben beim aktuellen Bildlaufstatus des Fensters zurück.
– schwarzer Raumfahrer
22. Januar 2019 um 13:03 Uhr
Mögliches Duplikat von Bestimmen Sie den Abstand vom oberen Rand eines div zum oberen Rand des Fensters mit Javascript
– T. Todua
23. September 2015 um 11:26 Uhr