tag javascript html

javascript - getelementsbytagname



Encuentra X/Y de un elemento HTML con JavaScript (6)

Eso puede ser complicado según el navegador y la versión. Sugiero usar jQuery y el plugin de posiciones.

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo encontrar las coordenadas XY de un elemento HTML (DIV) de JavaScript si no se establecieron explícitamente?


No estoy seguro de lo que necesita, y esas cosas siempre son relativas (pantalla, ventana, documento). Pero cuando tuve que resolverlo, encontré este sitio útil: http://www.mattkruse.com/javascript/anchorposition/source.html

Y también encontré que el complemento de información sobre herramientas que alguien hizo para jQuery tenía todo tipo de información interesante para x, y trucos de posicionamiento (mira su clase de ventana gráfica y el soporte subyacente que proporciona jQuery). http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/


Así es como lo hago:

// Based on: http://www.quirksmode.org/js/findpos.html var getCumulativeOffset = function (obj) { var left, top; left = top = 0; if (obj.offsetParent) { do { left += obj.offsetLeft; top += obj.offsetTop; } while (obj = obj.offsetParent); } return { x : left, y : top }; };


Por lo que vale, aquí hay una versión recursiva:

function findPos(element) { if (element) { var parentPos = findPos(element.offsetParent); return [ parentPos.X + element.offsetLeft, parentPos.Y + element.offsetTop ]; } else { return [0,0]; } }


Puede agregar dos propiedades al Element.prototype para obtener la parte superior / izquierda de cualquier elemento.

window.Object.defineProperty( Element.prototype, ''documentOffsetTop'', { get: function () { return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop : 0 ); } } ); window.Object.defineProperty( Element.prototype, ''documentOffsetLeft'', { get: function () { return this.offsetLeft + ( this.offsetParent ? this.offsetParent.documentOffsetLeft : 0 ); } } );

Aquí hay una demostración que compara los resultados con jQuery''s offset().top y .left : http://jsfiddle.net/ThinkingStiff/3G7EZ/


Puede usar una biblioteca como Prototype o jQuery, o puede usar esta práctica función :

Devuelve una matriz.

myPos = findPos(document.getElementById(''something'')) x = myPos[0] y = myPos[1] function findPos(obj) { var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return [curleft,curtop]; }