¿Cuál es la forma más sencilla de determinar la posición de un elemento en relación con el documento / cuerpo / ventana del navegador?
En este momento estoy usando .offsetLeft/offsetTop
, pero este método solo le da la posición relativa al elemento principal, por lo que necesita determinar cuántos padres para el elemento del cuerpo, para saber la posición en relación con el cuerpo / ventana del navegador / posición del documento.
Este método también es demasiado engorroso.
javascript
dom
Einstein
fuente
fuente
Puede llegar arriba y a la izquierda sin atravesar DOM de esta manera:
fuente
<html>
elemento.Puedes usar
element.getBoundingClientRect()
para recuperar la posición del elemento en relación con la ventana gráfica.Entonces usa
document.documentElement.scrollTop
para calcular el desplazamiento de la ventana gráfica.La suma de los dos dará la posición del elemento en relación con el documento:
fuente
document.documentElement.scrollTop
no funciona en Safari, utilicewindow.scrollY
en su lugarSugiero usar
como se propone aquí en lugar del cálculo de compensación manual mediante offsetLeft , offsetTop y offsetParent . como se propone aquí En algunas circunstancias * el recorrido manual produce resultados no válidos. Vea este Plunker: http://plnkr.co/pC8Kgj
* Cuando el elemento está dentro de un padre desplazable con posicionamiento estático (= predeterminado).
fuente
offsetLeft
yoffsetTop
no tomo en cuenta las transformaciones CSS3, quegetBoundingClientRect()
sí. Así que ese es un caso, los resultados pueden no ser válidos. Si lo necesita, puede obtener el desplazamiento de un elemento relativo al padre (comooffsetLeft
) usando(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
.document-offset
( Script de terceros ) es interesante y parece aprovechar los enfoques de las otras respuestas aquí.Ejemplo:
fuente
He encontrado que el siguiente método es el más confiable cuando se trata de casos extremos que se disparan offsetTop / offsetLeft.
fuente
Para aquellos que quieran obtener las coordenadas xey de varias posiciones de un elemento, en relación con el documento.
Uso
getCoords(document.querySelector('selector'), 'center')
getCoords(document.querySelector('selector'), 'bottom right')
getCoords(document.querySelector('selector'), 'top center')
fuente
Si no le importa usar jQuery, entonces puede usar
offset()
function. Consulte la documentación si desea obtener más información sobre esta función.fuente
http://www.quirksmode.org/js/findpos.html Explica la mejor manera de hacerlo, en general, estás en el camino correcto, tienes que encontrar las compensaciones y atravesar el árbol de los padres.
fuente