2011-07-08 18 views
5

Estoy tratando de obtener la posición absoluta (arriba y a la izquierda) de un clic del mouse relativo al navegador/cuerpo, no cualquier elemento padre dentro del cuerpo.¿Cómo obtengo la posición absoluta de un clic de un evento onClick en el cuerpo?

Tengo un oyente vinculado al cuerpo, pero e.pageX y e.pageY me dan la posición relativa a un div.

Tenga en cuenta que puedo aprovechar las funciones de jQuery y YUI.

Código que actualmente no funciona correctamente:

//getting the position 
function _handleClick(e) { 
    var data = { absX: e.pageX, absY: e.pageY}; 
    _logClickData(data); 
} 

//binding the function 
var methods = { 
    init: function() { 
     $("body").click(_handleClick); 
    } 
}; 
+1

De acuerdo con esto (http://docs.jquery.com/Tutorials:Mouse_Position), los que deben dar las posiciones absolutas. 'offsetX/Y' te da la posición relativa. – Mrchief

+0

@Mrchief - está en lo correcto, usando ese ejemplo me di cuenta de que necesitaba vincular el evento al documento y no al nodo del cuerpo. – Zugwalt

+0

Agregó lo mismo que la respuesta! – Mrchief

Respuesta

4

De acuerdo con esto (http://docs.jquery.com/Tutorials:Mouse_Position), los que deben darle posiciones absolutas. offsetX/Y le da la posición relativa.

edición de noviembre de 2013: el enlace original "Posición del Ratón" parece estar roto, pero the documentation for pageX contiene un ejemplo que utiliza jQuery pageX/Y. El page about the offset method también contiene ejemplos relevantes.

+0

El enlace que ha señalado para jQuery docs está roto. –

+1

@MiladNaseri: Los documentos originales se han ido (alguien olvidó implementar una página '302') pero mira la ** edición de noviembre **. Esas páginas le darán la misma información. – Mrchief

+0

Gracias, lo comprobé. –

7

El comentarista es correcta. pageX y pageY le dan la posición del mouse relativa al documento completo, no a su div principal. Pero si está interesado, puede obtener el puesto relativo al documento desde la posición relativa a un div.

Obtenga la posición del div principal en relación con el cuerpo, luego agregue los dos valores.

x = parentdiv.style.left + e.pageX; 
y = parentdiv.style.top + e.pageY; 



(0,0) 
_____________________ 
| 
| 
|   __________ 
|----100----|   | 
|   |---60---* | 
|   |__________| 
| 
| 
     * = Mouse Pointer 

Hice el diagrama porque era divertido. ¡No porque sintiera que necesitabas uno!

Además, para que lo anterior funcione, es posible que deba analizarlo.

+2

+1 para el divertido diagrama! Debe enviar esto a jQuery Docs – Mrchief

0

Si he entendido bien su pregunta esta sería la solución

$("body").click(function(e){ 
    var parentOffset = $(this).offset(); 
    var relX = e.pageX - parentOffset.left; 
    var relY = e.pageY - parentOffset.top; 

    window.alert(relX); 
    window.alert(relY); 
}); 
Cuestiones relacionadas