¿Cuál es la forma más fácil de determinar la posición de un elemento en relación con la ventana del documento/cuerpo/navegador? En este momento estoy usando'.offsetLeft/offsetTop ', pero este método solo te da la posición relativa al elemento padre, por lo que debes determinar cuántos padres al elemento del cuerpo, para saber la posición relativa al cuerpo/navegador posición de ventana/documento. Este método también es engorroso.encontrar la posición del elemento relativa al documento
Respuesta
Puede atravesar el offsetParent
hasta el nivel superior del DOM.
function getOffsetLeft(elem)
{
var offsetLeft = 0;
do {
if (!isNaN(elem.offsetLeft))
{
offsetLeft += elem.offsetLeft;
}
} while(elem = elem.offsetParent);
return offsetLeft;
}
http://www.quirksmode.org/js/findpos.html Explica la mejor manera de hacerlo, en general, estás en el camino correcto, tienes que encontrar los desplazamientos y recorrer el árbol de los padres.
Se puede utilizar para recuperar la posición element.getBoundingClientRect()
elemento con respecto al acceso visual.
Utilice scrollY
(document.documentElement.scrollTop
compatible con varios navegadores) para calcular la compensación de la ventana gráfica.
La suma de los dos dará la posición del elemento con relación al documento:
subjectRect.top + document.documentElement.scrollTop
En relación con la ventana gráfica no es la lo mismo que en relación con el documento.Si la página se desplaza hacia abajo un poco, la parte superior relativa a la ventana gráfica será un número menor que la parte superior relativa al documento. – MrVimes
comienza en relación con la ventana gráfica y agrega scrollY para obtenerla en relación con el documento. –
se sugiere emplear
element.getBoundingClientRect()
como se propone here en lugar de cálculo de desplazamiento manual de a través de offsetLeft, offsetTop y offsetParent. como se propone here En algunas circunstancias * el recorrido manual produce resultados no válidos. Ver este Plunker: http://plnkr.co/pC8Kgj
* Cuando el elemento está dentro de un elemento primario desplazable con posicionamiento estático (= predeterminado).
Puede hacer que el cálculo de compensación también funcione incorporando scrollLeft y scrollTop en él. –
Pero encontré 'offsetLeft' y' offsetTop' no tienen en cuenta las transformaciones CSS3, que 'getBoundingClientRect()' hace. Entonces ese es un caso, los resultados pueden ser inválidos. Si lo necesita, puede obtener el offset de un elemento relativo a parent (como 'offsetLeft') usando' (element.getBoundingClientRect(). Left - parent.getBoundingClientRect(). Left) '. –
Puede obtener parte superior izquierda y sin atravesar DOM como esto:
function getCoords(elem) { // crossbrowser version
var box = elem.getBoundingClientRect();
var body = document.body;
var docEl = document.documentElement;
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
var clientTop = docEl.clientTop || body.clientTop || 0;
var clientLeft = docEl.clientLeft || body.clientLeft || 0;
var top = box.top + scrollTop - clientTop;
var left = box.left + scrollLeft - clientLeft;
return { top: Math.round(top), left: Math.round(left) };
}
Esta respuesta no tiene en cuenta las compensaciones de los padres. Solo es relativo a la ventana gráfica – Nickey
@Nickey que no es verdadero: la posición de la ventana gráfica, más las comprobaciones de desplazamiento de desplazamiento, arrojan las coordenadas relativas a todo el documento. – natchiketa
Puede tener errores en los dispositivos móviles http://stackoverflow.com/a/32623832/962634 Necesita investigación – basil
Si está utilizando la NGP, document-offset es interesante y parece aprovechar los enfoques de las otras respuestas aquí. El uso es bastante simple:
var offset = require('document-offset')
var target = document.getElementById('target')
console.log(offset(target))
// => {top: 69, left: 108}
Si no les importa usar jQuery, a continuación, puede utilizar la función offset()
. Consulte documentation si desea obtener más información sobre esta función.
Probado en IE 11, Chrome 62, Firefox 56, Edge 38:
var box = domElement.getBoundingClientRect();
var offsetTop = Math.floor(box.top && box.top || box.y && box.y || 0);
Utilice la izquierda/x para offsetLeft.
- 1. CSS: posición relativa relativa del elemento principal a la altura del niño con posición absoluta
- 2. Encontrar la posición del elemento máximo
- 3. ¿Cómo encontrar la posición "relativa" de un elemento en su elemento padre? O: ¿Cómo encontrar al Sr. Azul?
- 4. encuentra la posición de un elemento relativo al último padre con posición relativa con javascript
- 5. Javascript: obtener la posición del mouse relativo al elemento principal
- 6. Posición absoluta pero relativa al padre
- 7. Obteniendo la posición del mouse relativa a un control
- 8. ¿Cuál es la posición: relativa útil para?
- 9. Posición: Posición absoluta: relativa en Chrome
- 10. BizTalk: Encontrar la especificación del documento no
- 11. Detectar la posición relativa del mouse en el lienzo matplotlib
- 12. Encontrar la posición de un elemento en una matriz sencilla
- 13. ¿Encontrar la posición de un elemento en una matriz bidimensional?
- 14. posición del elemento en la matriz
- 15. ¿Cómo se calcula la posición de la página de un elemento dom cuando el cuerpo puede estar en posición relativa?
- 16. jquery: ¿puedo animar la posición: absoluta a posición: relativa?
- 17. Convierta la posición absoluta en relativa
- 18. ¿Cómo puedo encontrar la posición absoluta de un elemento usando jQuery?
- 19. ¿Cómo obtener la posición del documento en un WebView?
- 20. ¿Puedo combinar la posición: relativa y flotar: izquierda?
- 21. ¿Posición DIV relativa a otra DIV?
- 22. Obtener la posición relativa entre 2 elementos DOM usando JavaScript
- 23. Obteniendo la posición de la anotación relativa a la pantalla
- 24. Obtener la distancia del elemento relativo a su elemento padre
- 25. ¿Problemas de posicionamiento en Firefox? posición: relativa para una pantalla: elemento de la tabla
- 26. Encontrar la posición del texto del cursor en JTextField
- 27. Cómo encontrar la posición absoluta del clic mientras se amplía
- 28. Java - Obtener posición del elemento en la matriz
- 29. ¿Cómo encontrar la posición de un elemento en el control del navegador web?
- 30. ¿Cómo obtener la posición del cursor relativa a la ventana en Mac OS X?
No, no, cuando cualquier elemento primario (especialmente el elemento html !!!) tiene márgenes, rellenos o bordes. –
con respecto a los márgenes ... podría ayudar establecer el tamaño de la caja en el recuadro de la frontera ... o algo similar ... nada que no se pueda arreglar ... –