2009-03-04 5 views
15

Je peux trouver la position du curseur. Mais j'ai besoin de savoir si la souris est stable. Si la souris n'a pas été déplacée pendant plus d'une minute, nous devons alerter l'utilisateur.Détection lorsque la souris ne bouge pas

Comment c'est possible, y at-il des événements spéciaux pour cela? (Uniquement pour IE en javascript)

Répondre

36

Définissez un délai d'attente lorsque la souris est déplacé d'une minute dans l'avenir, et si la souris est déplacée, désactivez le délai d'attente:

var timeout; 
document.onmousemove = function(){ 
    clearTimeout(timeout); 
    timeout = setTimeout(function(){alert("move your mouse");}, 60000); 
} 
+0

Je vois un problème potentiel: Chaque appel à setTimeout retourne un numéro pour un compteur.Quand va-t-il s'envelopper et que se passera-t-il alors? Je suggère plutôt setInterval (update, 1000), où 'update' incrémente une variable que l'événement onmousemove réinitialise. Si la variable obtient plus de 60 dans la mise à jour, alertez l'utilisateur – some

+2

A heads up, ceci ne fonctionne plus dans Chrome – Jay

+2

@Jay travaille pour moi –

1

N'existe-t-il pas un moyen de régler une minuterie pour qu'elle commence à s'incrémenter après chaque mouvement de souris? S'il atteint une minute, affichez la boîte de message, mais à chaque fois que la souris se déplace, la minuterie se réinitialise.

0

Vous pouvez utiliser l'événement onmousemove. À l'intérieur, clearTimeout(), et setTimeout (your_warning, 1 minute).

0

Vous pouvez utiliser this script/snippet pour détecter la position du pointeur de la souris et vous en «souvenir». Ensuite, utilisez une minuterie "setTimeout (...)" pour vérifier la position disons chaque seconde et se souvenir de cette heure.

Si plus d'une minute s'est écoulée et que la position n'a pas changé, vous pouvez alerter l'utilisateur.

1

Oui, vous avez un événement onmousemove en Javascript, afin d'obtenir ce que vous avez juste besoin de faire quelque chose comme:

startTimer(); 
element.onmousemove = stopTimer(); //this stops and resets the timer 

Vous pouvez l'utiliser sur l'étiquette du corps du document par exemple.

MISE À JOUR: @Marius a obtenu un meilleur exemple que celui-ci.

0

est ici une fonction-et fait qui permet de vérifier tout élément pour le mouvement:

function mouse (element, delay, callback) { 

    // Counter Object 
    element.ms = {}; 

    // Counter Value 
    element.ms.x = 0; 

    // Counter Function 
    element.ms.y = function() { 

     // Callback Trigger 
     if ((++element.ms.x) == delay) element.ms.callback(element, element.ms); 
    }; 

    // Counter Callback 
    element.ms.callback = callback; 

    // Function Toggle 
    element.ms.toggle = function (state) { 

     // Stop Loop 
     if ([0, "off"][state]) clearInterval(element.ms.z); 

     // Create Loop 
     if ([1, "on"][state]) element.ms.z = setInterval(element.ms.y, 1); 
    }; 

    // Function Disable 
    element.ms.remove = function() { 

     // Delete Counter Object 
     element.ms = null; return delete element.ms; 
    }; 

    // Function Trigger 
    element.onmousemove = function() { 

     // Reset Counter Value 
     element.ms.x = -1; 
    }; 

    // Return 
    return element.ms; 
}; 

Utilisation: mouse(element, delay, callback)

Exemples: Faire un cache de lecteur vidéo la souris après 5 secondes en mode veille et plein écran

let x = mouse(video, 5000, function (a) { 
    if (document.webkitIsFullScreen) video.style.cursor = "none"; 
}); 

x.toggle(1); addEventListener("mousemove", function() { 
    video.style.cursor = "auto"; 
}); 

Chat Room AFK (45 secondes) (en supposant que vous avez une boîte de chat et une fonction d'envoi de message):

let x = mouse(chatBox, (45e3), function (a) { 
    chatBox.send({ text: chatBox.username + " is AFK.", italic: true }); 
}); 

x.toggle(1); x.addEventListener("mousemove", function() { 
    chatBox.send({ text: chatBox.username + " is no longer AFK", italic: true }); 
});