2012-12-30 7 views
11

Mi chiedevo se c'era un modo per rilevare se il mouse è inattivo per circa 3 secondi in jQuery. C'è un plugin di cui non sono a conoscenza? Perché non credo che ci sia un metodo jQuery nativo. Qualsiasi aiuto sarebbe molto apprezzato!jQuery - rileva se il mouse è fermo?

+1

possibile duplicato di [Determinare se il mouse è ancora in javascript/jQuery?] (Http://stackoverflow.com/questions/2487939/determine-if-mouse-is-still-in-javascript-jquery) –

risposta

25

È possibile ascoltare l'evento mousemove, avviare un timeout ogni volta che si verifica e annullare qualsiasi timeout esistente.

var timeout = null; 

$(document).on('mousemove', function() { 
    clearTimeout(timeout); 

    timeout = setTimeout(function() { 
     console.log('Mouse idle for 3 sec'); 
    }, 3000); 
}); 

DEMO

Questo può essere facilmente fatto senza jQuery così (solo vincolante il gestore di eventi qui è jQuery-specifico).

+0

Grazie ! Questo è proprio quello che stavo cercando. :-D – ModernDesigner

+0

Probabilmente vuoi impostare 'timeout' su' null' dopo l'attivazione del timer per evitare di eseguire un 'clearTimeout()' non valido. – jfriend00

+0

@ jfriend00: non importa, davvero. http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-cleartimeout Anche il controllo 'null'. – Ryan

9

Non c'è bisogno di un plugin, o anche per jQuery affatto:

(function() { 
    var idlefunction = function() { 
      // what to do when mouse is idle 
     }, idletimer, 
     idlestart = function() {idletimer = setTimeout(idlefunction,3000);}, 
     idlebreak = function() {clearTimeout(idletimer); idlestart();}; 
    if(window.addEventListener) 
     document.documentElement.addEventListener("mousemove",idlebreak,true); 
    else 
     document.documentElement.attachEvent("onmousemove",idlebreak,true); 
})();