files/en-us/web/api/idledetector/index.md
{{securecontext_header}}{{APIRef("Idle Detection API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
The IdleDetector interface of the {{domxref('idle_detection_api','Idle Detection API','','true')}} provides methods and events for detecting user activity on a device or screen.
This interface requires a secure context.
{{InheritanceDiagram}}
IdleDetector object.start(), one of "active" or "idle". This attribute returns null before start() is called."locked" or "unlocked". This attribute returns null before start() is called.userState or screenState has changed."granted" on acceptance and "denied" on refusal.Promise that resolves when the detector starts listening for
changes in the user's idle state. userState and screenState are given
initial values. This method takes an optional options object with the threshold in
milliseconds where inactivity should be reported and signal for an
AbortSignal to abort the idle detector.The following example shows creating a detector and logging changes to the user's idle state. A button is used to get the necessary user activation before requesting permission.
const controller = new AbortController();
const signal = controller.signal;
startButton.addEventListener("click", async () => {
if ((await IdleDetector.requestPermission()) !== "granted") {
console.error("Idle detection permission denied.");
return;
}
try {
const idleDetector = new IdleDetector();
idleDetector.addEventListener("change", () => {
const userState = idleDetector.userState;
const screenState = idleDetector.screenState;
console.log(`Idle change: ${userState}, ${screenState}.`);
});
await idleDetector.start({
threshold: 60_000,
signal,
});
console.log("IdleDetector is active.");
} catch (err) {
// Deal with initialization errors like permission denied,
// running outside of top-level frame, etc.
console.error(err.name, err.message);
}
});
stopButton.addEventListener("click", () => {
controller.abort();
console.log("IdleDetector is stopped.");
});
{{Specifications}}
{{Compat}}