Detecting when the mouse is not moving
Set a timeout when the mouse is moved one minute into the future, and if the mouse is moved, clear the timeout:
var timeout;document.onmousemove = function(){ clearTimeout(timeout); timeout = setTimeout(function(){alert("move your mouse");}, 60000);}
Here's a one-and-done function that can check any element for movement:
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;};
Usage:mouse(element, delay, callback)
Examples:Make a video player hide the mouse after 5 seconds when idle and fullscreen
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 Seconds) (assuming you have a chat box and a send message function):
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 });});
Is there not a way to set a timer to start incrementing after every mouse movement event?
If it gets to a minute then pop up the message box, but every time the mouse moves the timer gets reset.