Ecco una funzione one-and-fatto che può controllare qualsiasi elemento per il movimento:
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;
};
utilizzo: mouse(element, delay, callback)
Esempi: Fai un lettore video nascondere il mouse dopo 5 secondi inattivo e a schermo intero
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 secondi) (supponendo che si dispone di una casella di chat e una funzione di messaggio di invio):
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 });
});
vedo un potenziale problema: Ogni chiamata a setTimeout restituisce un numero di contatore.Quando si avvolgerà e cosa succederà allora? Suggerisco invece un setInterval (update, 1000), dove 'update' incrementa una variabile che l'evento onmousemove ripristina. Se la variabile supera 60 in aggiornamento, avvisa l'utente – some
A a testa alta, questo non funziona più in Chrome – Jay
@Jay funziona per me –