Foros del Web » Programando para Internet » Javascript »

Saber posición absoluta de un elemento

Estas en el tema de Saber posición absoluta de un elemento en el foro de Javascript en Foros del Web. Bueno de nuevo por aquí, estoy tratando de hacer una función que mueva un elemento y para eso necesito conocer dónde está ahora exactamente para ...
  #1 (permalink)  
Antiguo 15/02/2011, 14:50
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Saber posición absoluta de un elemento

Bueno de nuevo por aquí, estoy tratando de hacer una función que mueva un elemento y para eso necesito conocer dónde está ahora exactamente para sumarle o restarle lo que necesite. De momento tengo la función así:
Código Javascript:
Ver original
  1. // ...
  2.   mover : function(cuanto, desde){
  3.    var estilo = P(this).getStyle(desde).convertirMedidas(cuanto.match(/[a-z]+$/i)[0]);
  4.    P(this).style[desde] = parseFloat(cuanto.match(/^\d+/)[0] + cuanto) + estilo.match(/[a-z]+$/i)[0];
  5.    return P(this);
  6.   },
  7. // ...
  8. // Ej : P('#s').mover('10px', 'top');
En teoría todo bien, la función convertirMedidas como el propio nombre indica la uso para pasar de cm a px, pt...; y no hay problema con ella. La p*&#"€ es que getStyle en vez de devolverme por ejemplo 20px, me devuelve auto . Ahora la pregunta es, ¿cómo puedo saber cuánto hay desde por ejemplo un div hasta el margen izquierdo.
Saludos y gracias ^^
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 15/02/2011, 16:32
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 9 meses
Puntos: 10
Respuesta: Saber posición absoluta de un elemento

Tu JS muy raramente complejo, espero programar así algún día, pero por si acaso ya usaste

document.getElementById(id).offsetLeft
document.getElementById(id).offsetTop

o los métodos de jquery offset() y position()??

Saludos!
  #3 (permalink)  
Antiguo 15/02/2011, 16:51
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Saber posición absoluta de un elemento

Correcto! Mañana lo pruebo y ya veré cómo me va. En realidad el código no es complejo, pero como uso funciones que he fabricado yo puede parecer que es más complicado. Como ya dije, convertirMedidas es para usar distintas unidades de medidad, y getStyle es una función que devuelve el computedStyle (en IE, en FF y Chrome devuelve otra cosa más larga pero es lo mismo XD). Por último la función P no es más que document.querySelector.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 15/02/2011, 17:13
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Saber posición absoluta de un elemento

no olvides de acompañar a esas dos propiedades con la propiedad offsetParent
  #5 (permalink)  
Antiguo 15/02/2011, 17:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Saber posición absoluta de un elemento

No es tan simple, si googleas vas a encontrar info, te dejo un resumen de la implementacion de Mootools para que te hagas una idea.

Código Javascript:
Ver original
  1. function isBody(element){
  2.     return (/^(?:body|html)$/i).test(element.tagName);
  3. };
  4.  
  5. function getOffset(element){
  6.     //...
  7.     var position = {x: 0, y: 0}
  8.     while (element && !isBody(element)){
  9.         position.x += element.offsetLeft;
  10.         position.y += element.offsetTop;
  11.         element = element.offsetParent;
  12.     //...
  13.     }
  14.     //...
  15.     return position;
  16. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 18/02/2011, 19:07
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Saber posición absoluta de un elemento

Bueno tengo dos opciones, pero no sé cuál es la correcta, porque a veces devuelven lo mismo y a veces diferente:
Código Javascript:
Ver original
  1. posicion : function(donde){
  2.    var left = this.offsetLeft, top = this.offsetTop, padre = this.offsetParent, body = P(document.body);
  3.    while(!/(body|html)/i.test(padre.tagName)){
  4.     left += padre.offsetLeft;
  5.     top += padre.offsetTop;
  6.     padre = padre.offsetParent;
  7.    }
  8.    return {
  9.     'left' : left,
  10.     'right' : body.getStyle('width').match(/\d+/)[0]-left,
  11.     'top' : top,
  12.     'bottom' : body.getStyle('height').match(/\d+/)[0]-top
  13.    }[donde];
  14.   },
y
Código Javascript:
Ver original
  1. posicion : function(donde){
  2.    var left = this.offsetLeft, top = this.offsetTop, padre = this.parentNode, body = P(document.body);
  3.    while(!/(body|html)/i.test(padre.tagName)){
  4.     left += padre.offsetLeft;
  5.     top += padre.offsetTop;
  6.     padre = padre.parentNode;
  7.    }
  8.    return {
  9.     'left' : left,
  10.     'right' : body.getStyle('width').match(/\d+/)[0]-left,
  11.     'top' : top,
  12.     'bottom' : body.getStyle('height').match(/\d+/)[0]-top
  13.    }[donde];
  14.   },
En principio la que me funciona 'mejor' es la primera, con offsetParent (con el add-on Web Developer de FF averiguo el left y lo comparo con el resultado), pero me gustaría saber por qué no se puede usar parentNode.
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:27.