Wie bekomme ich den Abstand von oben für ein Element?

Lesezeit: 4 Minuten

Benutzer-Avatar
Sami Al-Subhi

Ich möchte wissen, wie man JavaScript verwendet, um die Entfernung eines Elements zu erhalten oben auf der Seite, nicht das übergeordnete Element.
Geben Sie hier die Bildbeschreibung ein

http://jsfiddle.net/yZGSt/1/

  • 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

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

Benutzer-Avatar
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>

Benutzer-Avatar
Sachleen

Verwenden offsetTop

document.getElementById("foo").offsetTop

Demo

Benutzer-Avatar
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

Benutzer-Avatar
Fanky

Dieser Oneliner scheint gut zu funktionieren

document.getElementById("el").getBoundingClientRect().top +  window.scrollY

Ihre Geige aktualisiert

  • 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

Benutzer-Avatar
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

1228510cookie-checkWie bekomme ich den Abstand von oben für ein Element?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy