Qual é a maneira mais fácil de determinar a posição de um elemento em relação ao documento / corpo / janela do navegador?
Agora estou usando .offsetLeft/offsetTop
, mas este método só fornece a posição relativa ao elemento pai, então você precisa determinar quantos pais para o elemento corpo, para saber a posição relativa ao corpo / janela do navegador / posição do documento.
Este método também é complicado.
javascript
dom
einstein
fonte
fonte
Você pode obter o topo e a esquerda sem atravessar o DOM desta forma:
fonte
<html>
elemento.Você pode usar
element.getBoundingClientRect()
para recuperar a posição do elemento em relação à janela de visualização.Em seguida, use
document.documentElement.scrollTop
para calcular o deslocamento da janela de visualização.A soma dos dois dará a posição do elemento em relação ao documento:
fonte
document.documentElement.scrollTop
não funciona no Safari, use emwindow.scrollY
vez dissoEu sugiro usar
conforme proposto aqui, em vez do cálculo de deslocamento manual por meio de offsetLeft , offsetTop e offsetParent . conforme proposto aqui Em algumas circunstâncias * a passagem manual produz resultados inválidos. Veja este Plunker: http://plnkr.co/pC8Kgj
* Quando o elemento está dentro de um pai rolável com posicionamento estático (= padrão).
fonte
offsetLeft
eoffsetTop
não levo em consideração as transformações CSS3, o quegetBoundingClientRect()
leva. Portanto, esse é um caso em que os resultados podem ser inválidos. Se precisar, você pode obter o deslocamento de um elemento em relação ao pai (comooffsetLeft
) usando(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
.document-offset
( Script de terceiros ) é interessante e parece aproveitar as abordagens das outras respostas aqui.Exemplo:
fonte
Descobri que o método a seguir é o mais confiável ao lidar com casos extremos que deslocam offsetTop / offsetLeft.
fonte
Para aqueles que desejam obter as coordenadas xey de várias posições de um elemento, em relação ao documento.
Uso
getCoords(document.querySelector('selector'), 'center')
getCoords(document.querySelector('selector'), 'bottom right')
getCoords(document.querySelector('selector'), 'top center')
fonte
Se você não se importa em usar jQuery, pode usar a
offset()
função. Consulte a documentação se quiser ler mais sobre esta função.fonte
http://www.quirksmode.org/js/findpos.html Explica a melhor maneira de fazer isso, afinal, você está no caminho certo você tem que encontrar os deslocamentos e subir na árvore dos pais.
fonte