Detecting when the mouse is not moving Detecting when the mouse is not moving javascript javascript

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.