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
JavaScript
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;
}