2011-10-14 5 views
23

Così, come la questione specifica, c'è un modo per innescare un evento MouseMove in jQuery che trasmette anche le coordinate del mouse sull'oggetto evento?C'è un modo per attivare mousemove e ottenere event.pageX, event.pageY?

Finora il mio codice può attivare il MouseMove utilizzando la funzione di .trigger (evento), ma l'event.pageX e event.pageY sono indefiniti.

+0

È per test? – airportyh

+0

Una volta che si poteva fare è salvare i dati dell'evento dall'ultimo evento reale mousemove, quindi quando lo si attiva riutilizzarlo a livello di codice se non esistono nuovi dati di eventi. Se i veri eventi Mousemove non vengono attivati, significa che il mouse non si è spostato, quindi i dati dell'evento dall'ultimo vero mousemove dovrebbero avere ancora la posizione corrente. – Mahn

risposta

3

non credo possibile ottenere le coordinate del mouse su richiesta tramite JavaScript/jQuery; tuttavia se si associa alla posizione una var globale è possibile accedervi in ​​qualsiasi momento in tutto il documento in questo modo:

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

per un'opzione meno intensivo della CPU, è possibile aggiungere un timeout, anche se è il commercio delle prestazioni per un leggero ritardo nel sapere dove il mouse è:

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

si dovrebbe ora essere in grado di accedere ai window.xPos e window.yPos da qualsiasi parte del documento utilizzando entrambe le soluzioni senza bisogno di attivare un evento finto.

+7

-1 questo non indirizza la domanda, che coinvolge un evento innescato manualmente. – zzzzBov

+0

So come ottenere le coordinate del mouse vincolando il mouse su un oggetto. Ma diciamo che il mouse non si muove, ma voglio usare la funzione di trigger in jQuery per attivare un mousemove virtuale e ottenere comunque le coordinate. –

+2

@ geossj5 - Se stai già seguendo il mouse e il mouse non si muove più, allora sicuramente qualunque sia stata l'ultima cifra registrata sarà ancora il caso ...? –

0

io non sono sicuro di aver capito appieno la domanda. Si può fare:

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

Ora, ogni volta che il mouse si sposta su someClass, si registreranno le cordinate xy. Ecco lo jsfiddle per vederlo in azione e il jquery documentation.

+1

So come ottenere le coordinate del mouse vincolando il mouse su un elemento. Ma diciamo che il mouse non si muove, ma voglio usare la funzione di trigger in jQuery per attivare un mousemove virtuale e ottenere comunque le coordinate. –

+0

Come stai muovendo il mouse con Javascript? – Ryre

0

Non è possibile spostare un mouse, se questo è quello che stai chiedendo. Ma potresti chiamare una funzione con qualsiasi contesto e argomento tu voglia. Es .:

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

Credo di conoscere il tuo problema. Stai cercando di interrogare la posizione del mouse a livello di programmazione. Forse hai un codice come questo:

$(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'); 

Quindi hai assolutamente ragione. Le proprietà pageY e pageX sull'oggetto evento non saranno definite. In realtà, c'è un sacco di cose nell'oggetto evento che non ci sarà, non solo .pageY e .pageX. Potrebbe esserci qualche bug in jQuery. In ogni caso, non associare la chiamata per attivare e attivando invece l'evento su $ (finestra). Non chiedetemi perché funziona anche se ma per me lo ha fatto:

$(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

è necessario impostare pageX e pageY direttamente prima di far scattare l'evento. Per impostare queste proprietà, creare un oggetto 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

Questo non funziona poiché jQuery ignorerà i parametri pageX e pageY quando viene chiamato il trigger. –

+0

Cosa ti porta a questa conclusione? Dai un'occhiata a [questo jsfiddle] (http://jsfiddle.net/yPgnp/). – tenedor

+0

Sono d'accordo, questo metodo è stato il migliore per me, abbastanza facile da definire l'evento da soli e basta cambiare il pageX/pageY oggetti di scena te stesso – CatalinBerta

0

Questo è il meglio che ho potuto venire con, che non inolve impostazione che le variabili globali. L'evento click acquisirà comunque le coordinate, quindi puoi passare quell'evento al tuo mouse.

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

Quindi, tale oggetto evento sarà il secondo argomento nella funzione mousemove; il primo è l'evento mousemove o l'evento jQuery creato.

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