UNPKG

webdev-power-kit

Version:

A powerful toolkit that simplifies access to browser features like clipboard, notifications, battery, vibration, and more — perfect for modern web developers.

49 lines (48 loc) 1.4 kB
let idleTimeoutID = null; let isListening = false; /** * Starts the idle timer. * @param timeout - Time in milliseconds before user is considered idle. * @param callback - Function to call when user becomes idle. */ export function startIdleTimer(timeout, callback) { if (isListening) return; // Avoid duplicate listeners isListening = true; const resetTimer = () => { if (idleTimeoutID) clearTimeout(idleTimeoutID); idleTimeoutID = setTimeout(callback, timeout); }; // Events that indicate activity const events = [ "mousemove", "keydown", "mousedown", "touchstart", "scroll" ]; events.forEach((event) => window.addEventListener(event, resetTimer, { passive: true })); resetTimer(); // start on load } /** * Manually reset the idle timer. */ export function resetIdleTimer() { if (idleTimeoutID) { clearTimeout(idleTimeoutID); idleTimeoutID = null; } } /** * Stops the idle timer and removes event listeners. */ export function stopIdleTimer() { if (!isListening) return; const events = [ "mousemove", "keydown", "mousedown", "touchstart", "scroll" ]; events.forEach((event) => window.removeEventListener(event, resetIdleTimer)); if (idleTimeoutID) { clearTimeout(idleTimeoutID); idleTimeoutID = null; } isListening = false; }