So ermitteln Sie mit jQuery den vertikalen Abstand von oben in px eines Elements


78

Wie finde ich mithilfe von Javascript / jQuery den vertikalen Abstand vom oberen Rand der Seite zu der Stelle, an der das Element im DOM vorhanden ist?

Ich habe so etwas wie

<ul>
    <li>one</li>
    <li>one</li>
    <li>one</li>
    <li>one</li>
    <li class="test">one</li>
    ....
    ....
    ....
    <li>one</li>
</ul>

Zum Beispiel möchte ich hier den vertikalen Abstand vom oberen Rand der Seite zum li#testElement ermitteln.

Ich habe es versucht, .scrollTop()aber es kommt immer als 0!


1
ist es das, wonach du suchst? var position = $ ('li # test'). position (); alert (position.top);
Jonas m

Antworten:


164

Verwenden Sie .offset()diese Option , um den Abstand zwischen einem Element und dem oberen Rand des Dokuments zu ermitteln:

$("li.test").offset().top

103

Die Antwort von Rob W ist richtig - das gibt Ihnen den Versatz vom oberen Rand der ganzen Seite.

Wenn Sie den Versatz vom oberen Rand des sichtbaren Bildschirms erhalten möchten, gehen Sie folgendermaßen vor:

var viewableOffset = $("#li.test").offset().top - $(window).scrollTop();

Hoffentlich hilft das!


2
Haha danke. SO war schon immer ein nützlicher Erfolg bei Google-Suchanfragen, und ich war gelangweilt und dachte, ich würde einige Fragen beantworten. Ich trolle meistens hier herum, während ich auf eine Antwort auf der Schwesterseite von SO, ServerFault, warte. Ich bin ein langjähriger Programmierer und Neuling Admin. :)
thexfactor

1
Dies ist ein ausgezeichneter Code, wenn Sie die Position steuern: feste Elemente!
Starkers

3

Soweit ich weiß, .offset()erhalten Sie den Abstand zwischen der aktuellen Bildlaufposition und dem oberen Rand des Dokuments.

Sie müssen dies verwenden: $("li.test").position().top


relativ zum offsetParent, der möglicherweise nicht der übergeordnete div
aaron

0

Verwenden Sie $ (element) .offset (). Top und fügen Sie die Höhe der vorhandenen festen Elemente auf der Seite hinzu, um die Genauigkeit zu erhöhen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.