Jaki jest najłatwiejszy sposób określenia pozycji elementów względem dokumentu / treści / okna przeglądarki?
W tej chwili używam .offsetLeft/offsetTop
, ale ta metoda podaje tylko pozycję względem elementu nadrzędnego, więc musisz określić, ilu rodziców ma element ciała, aby poznać położenie względem pozycji ciała / okna przeglądarki / dokumentu.
Ta metoda jest również uciążliwa.
javascript
dom
einstein
źródło
źródło
Możesz dostać się na górę i w lewo bez przechodzenia przez DOM w ten sposób:
źródło
<html>
elementu.Możesz użyć
element.getBoundingClientRect()
do pobrania pozycji elementu względem rzutni.Następnie użyj
document.documentElement.scrollTop
do obliczenia odsunięcia rzutni.Suma tych dwóch da pozycję elementu względem dokumentu:
źródło
document.documentElement.scrollTop
nie działa w Safari, użyjwindow.scrollY
zamiast tegoSugeruję użycie
jak zaproponowano tutaj zamiast ręcznego obliczania przesunięcia za pomocą offsetLeft , offsetTop i offsetParent . zgodnie z propozycją w tym miejscu W pewnych okolicznościach * ręczne przechodzenie daje nieprawidłowe wyniki. Zobacz ten Plunker: http://plnkr.co/pC8Kgj
* Gdy element znajduje się wewnątrz przewijalnego elementu nadrzędnego z pozycją statyczną (= domyślną).
źródło
offsetLeft
ioffsetTop
nie biorę pod uwagę transformacji CSS3, cogetBoundingClientRect()
robi. Więc to przypadek, że wyniki mogą być nieprawidłowe. Jeśli tego potrzebujesz, możesz uzyskać przesunięcie elementu względem elementu nadrzędnego (jakoffsetLeft
) za pomocą(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
.document-offset
( Skrypt innej firmy ) jest interesujący i wydaje się, że wykorzystuje podejście z innych odpowiedzi tutaj.Przykład:
źródło
Zauważyłem, że następująca metoda jest najbardziej niezawodna w przypadku skrajnych przypadków, w których dochodzi do potknięcia offsetTop / offsetLeft.
źródło
Dla tych, którzy chcą uzyskać współrzędne x i y różnych pozycji elementu względem dokumentu.
Stosowanie
getCoords(document.querySelector('selector'), 'center')
getCoords(document.querySelector('selector'), 'bottom right')
getCoords(document.querySelector('selector'), 'top center')
źródło
Jeśli nie masz nic przeciwko używaniu jQuery, możesz użyć
offset()
funkcji. Zapoznaj się z dokumentacją, jeśli chcesz dowiedzieć się więcej o tej funkcji.źródło
http://www.quirksmode.org/js/findpos.html Wyjaśnia najlepszy sposób na zrobienie tego. Podsumowując, jesteś na dobrej drodze, musisz znaleźć przesunięcia i przejść w górę drzewa rodziców.
źródło