2011-10-14 31 views
23

Entonces, como especifica la pregunta, ¿hay alguna manera de desencadenar un evento mousemove en jQuery que también envíe las coordenadas del mouse al evento Object?¿Hay alguna manera de activar mousemove y obtener event.pageX, event.pageY?

Hasta ahora, mi código puede desencadenar el mousemove usando la función .trigger (evento) pero el evento.pageX y event.pageY no están definidos.

+0

¿Esto es para pruebas? – airportyh

+0

Una vez, lo que podría hacer es guardar los datos del evento del último evento mousemove real, luego, cuando lo desencadena, reutilizarlo programáticamente si no existen datos de eventos nuevos. Si los eventos de mousemove reales no se disparan, eso significa que el mouse no se movió, por lo que los eventData del último mousemove real deberían tener la posición actual fija. – Mahn

Respuesta

3

No creo que sea posible obtener las coordenadas del mouse en demanda a través de JavaScript/jQuery; Sin embargo si enlaza la posición a un var mundial a continuación, puede acceder a ellos en cualquier momento a lo largo del documento como este:

$(document).ready(function(){ 
    $().mousemove(function(e){ 
     window.xPos = e.pageX; 
     window.yPos = e.pageY; 
    }); 
}); 

por una opción menos intensivo de la CPU, se puede añadir un tiempo de espera, a pesar de que el comercio de rendimiento para un ligero retraso en saber dónde está el ratón:

function getMousePosition(timeoutMilliSeconds) { 
    $(document).one("mousemove", function (event) { 
     window.xPos = event.pageX; 
     window.yPos = event.pageY; 
     setTimeout("getMousePosition(" + timeoutMilliSeconds + ")", timeoutMilliSeconds); 
    }); 
} 
getMousePosition(100); 

ahora debería ser capaz de acceder a los window.xPos y window.yPos desde cualquier parte del documento utilizando cualquiera de las soluciones sin necesidad de desencadenar un evento falso.

+7

-1 esto no aborda la pregunta, que involucra un evento activado manualmente. – zzzzBov

+0

Sé cómo obtener las coordenadas del mouse vinculando mousemove en un objeto. Pero supongamos que el mouse no se mueve, pero quiero usar la función de disparo en jQuery para activar un mousemove virtual y obtener las coordenadas. –

+2

@ geossj5 - Si ya está rastreando el mouse, y el mouse ya no se mueve, seguramente cualesquiera que sean las últimas coordenadas registradas seguirán siendo el caso ...? –

0

No estoy seguro de entender completamente la pregunta. Que puede hacer:

$('.someClass').mousemove(function(event){ 
    console.log(event.pageX); 
    console.log(event.pageY); 
}); 

Ahora, cada vez que el ratón se mueve más someClass, se registrarán los cordinates xy. Aquí está el jsfiddle para verlo en acción y el jquery documentation.

+1

Sé cómo obtener las coordenadas del mouse vinculando mousemove en un elemento. Pero supongamos que el mouse no se mueve, pero quiero usar la función de disparo en jQuery para activar un mousemove virtual y obtener las coordenadas. –

+0

¿Cómo mueve el mouse con Javascript? – Ryre

0

No puede mover un mouse si eso es lo que está preguntando. Pero podría llamar a una función con cualquier contexto y argumento que desee. Por ejemplo:

function foobar(e) 
{ 
    this.className = 'whatever'; // this == element 
} 

someElement.onmousemove = foobar; 

var obj = {whatever:'you want'}; 
foobar.call(someElement, obj); // calls foobar(obj) in context of someElement 
0

Creo que sé su problema. Está intentando consultar la posición del mouse mediante programación. Tal vez tenga un código como este:

$(document).one('mousemove.myModule', function (e) { 
    // e.pageY and e.pageX is undefined. 
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); } 
     ).trigger('mousemove.myModule'); 

Entonces tiene toda la razón. Las propiedades pageY y pageX en el objeto de evento no estarán definidas. En realidad, hay un montón de cosas en el evento que no estarán allí, no solo .pageY y .pageX. Podría ser un error en jQuery. De todos modos, simplemente no encadene esa llamada para activar y activando el evento en $ (ventana) en su lugar. No me pregunte por qué funciona, pero aunque para mí lo hizo:

$(document).one('mousemove.myModule', function (e) { 
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); }); 

// Now e.pageY and e.pageX will be defined! 
$(window).trigger('mousemove.myModule'); 
37

Es necesario configurar pageX y pageY directamente antes de desencadenar el evento. Para establecer estas propiedades, cree un objeto jQuery.Event.

// create a jQuery event 
e = $.Event('mousemove'); 

// set coordinates 
e.pageX = 100; 
e.pageY = 100; 

// trigger event - must trigger on document 
$(document).trigger(e); 

See it in jsFiddle.

+0

Esto no funciona, ya que jQuery ignorará los parámetros pageX y pageY cuando se active el desencadenador. –

+0

¿Qué te lleva a esta conclusión? Consulte [este jsfiddle] (http://jsfiddle.net/yPgnp/). – tenedor

+0

Acepto, este método ha sido el mejor para mí, bastante fácil de definir el evento usted mismo y simplemente cambie la páginaX/páginaY apoyos usted mismo – CatalinBerta

0

Esto es lo mejor que se me ocurrió, eso no le implicó establecer variables globales. El evento click aún capturará las coordenadas, por lo que puede pasar ese evento a su mousemove.

$(element).click(function(e){ 
    $(element).trigger('mousemove',e); 
}); 

Entonces, ese objeto de evento será el segundo argumento en su función de mousemove; el primero es el evento mousemove real o el evento creado jQuery.

$(element).mousemove(function(e,clickEvent){ 
    if typeof e.pageX === 'undefined' e = clickEvent; 
    // or if you prefer, clickEvent.pageX; 
}); 
Cuestiones relacionadas