Estoy tratando de obtener las coordenadas de un elemento en una página. He estado usando la forma estándar para obtenerlo:Obtiene compensación real izquierda/parte superior del elemento con compensador en línea
var el = element, pos = {x: 0, y: 0};
while (el) {
pos.x += el.offsetLeft;
pos.y += el.offsetTop;
el = el.offsetParent;
}
Pero este método falla cuando el elemento en cuestión tiene display: block
, y uno de los offsetParents tiene display: inline;
. Esto es debido al hecho descrito en this thread:
Después de algún tratando con jQuery resulta que su .offset()
-method devuelve el correcto desplazamiento, y yo he mirado a través de la fuente pero no se encuentra exactamente cómo ellos lo hacen. Entonces mi pregunta es: ¿cómo obtengo la posición exacta? No puedo usar jQuery para este proyecto, y el método en the thread described earlier es engorroso, agregar un elemento y probar es demasiado trabajo (perspectiva de rendimiento) y tampoco está disponible el uso de Element.getBoundingClientRect
.
Si tienes ganas de probarlo se puede ir a Apple.com abrir el depurador de elección y escriba lo siguiente:
var el, el2;
el = el2 = document.querySelector('#worldwide span');
var pos = {x: 0, y: 0};
while (el2) {
pos.x += el2.offsetLeft;
pos.y += el2.offsetTop;
el2 = el2.offsetParent;
}
alert("Calculated position: " + pos.x + "x" + pos.y + " window size: " + screen.width + "x" + screen.height);
Con este código me sale:. Calculated position: 1354x988 window size: 1280x800
(es decir, el desplazamiento izquierda es la forma de la pantalla, que claramente no es)
¿Cómo es esto posible? ¿Alguna idea de trabajo? Aproximaciones? No tiene que ser exacto, pero tiene que ser mejor que antes. Gracias.
Editar: Esto es para el motor de renderizado WebKit, para aclarar.