2009-10-22 13 views
6

Ho una funzione in javascript che sposta un div in base alla posizione del mouse. Questa funzione è impostata su una funzione setInterval() ed eseguita ogni secondo. Ho bisogno di catturare la posizione del mouse in questo modo:acquisizione posizione del mouse su setInterval() in Javascript

function mousemov() { 
    document.getElementById("myDiv").style.left = Event.clientX; //don't work 
} 

window.onload = function() { 
    setInterval("mousemov()",1000); 
} 

Ps: Non posso utilizzare l'evento MouseMove perché la funzione deve essere eseguita anche se il mouse è fermo.

Grazie per gli aiuti!

+1

Perché non utilizzare l'evento mousemove? Non vuoi veramente cambiare le coordinate di 'div' se il mouse non si muove. Aggiorna le coordinate solo su mousemove. –

+1

Se il mouse è fermo, non è possibile utilizzare il valore precedente ottenuto sull'evento mouseMove? – pgb

risposta

7

L'unica volta che si può accedere l'oggetto evento è durante l'esecuzione di un gestore di eventi. Quindi ciò che devi fare è creare un evento OnMouseMove sul documento e memorizzare le coordinate del mouse in un oggetto accessibile a livello globale. È quindi possibile accedere a questi valori da qualsiasi altra parte dello script per determinare la posizione del mouse.

Ecco un esempio (non lo si utilizza jQuery, quindi questo è il codice DOM dritto):

document.onmousemove = function(e) { 
    var event = e || window.event; 
    window.mouseX = event.clientX; 
    window.mouseY = event.clientY; 
} 

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 

window.onload = function() { 
    setInterval(mousemov, 1000); 
} 

dovrei fare la nota che clientX e clientY non prendono lo scorrimento in considerazione. Avrai bisogno di recuperare gli offset di scorrimento e applicarli ai valori restituiti.

+3

+1. Potresti voler spiegare che un oggetto evento non viene creato a meno che tu non catturi un evento. Quindi ciò che deve essenzialmente fare è catturare l'evento mousemove e memorizzare la posizione del mouse in un punto accessibile a livello globale e quindi utilizzare tale valore nella funzione intervallo. –

+3

Inoltre, 'setInterval (" functionName() ", 1000)' non è una buona pratica (è simile a 'eval()'). Scegli "setInterval (mousemov, 1000)" o "setInterval (function() {mousemove()}, 1000)" –

+1

FYI 'clientX' /' clientY' esclude qualsiasi scorrimento del documento che possa esistere. –

1

bene, se si ascolta il mouse spostarsi per il documento e salvare la sua posizione, quindi, ogni volta che si desidera, ad es. ogni secondo nel tuo caso hai l'ultima posizione del mouse registrata.

questo è un esempio jQuery

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

e la funzione mousemove sarebbe

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX; 
} 
Problemi correlati