Idle Detection API 的设计是当 App 被用户闲置超过设定的时间时触发,目前这个 API 还在提议的阶段。
API 的相关文件: https://wicg.github.io/idle-detection/
空闲检测可以解决什麽问题?
在有这个 API 前其实有个 visibilitychange
事件能够达到一半的目的,浏览器会侦测是否还 Focus 在当前的 Tab。
document.addEventListener("visibilitychange", function () {
if (document.visibilityState === "visible") {
backgroundMusic.play();
} else {
backgroundMusic.pause();
}
});
主要是透过用户、萤幕两方面去侦测
enum UserIdleState {
"active",
"idle"
};
enum ScreenIdleState {
"locked",
"unlocked"
};
直接看官方的范例:
const main = async () => {
// 有就可以用
if (!("IdleDetector" in window)) {
return console.log("IdleDetector is not available.");
}
// 但还是需要先取得权限
if ((await IdleDetector.requestPermission()) !== "granted") {
return console.log("Idle detection permission not granted.");
}
try {
const controller = new AbortController();
const signal = controller.signal;
const idleDetector = new IdleDetector();
idleDetector.addEventListener("change", () => {
console.log(
`Idle change: ${idleDetector.userState}, ${idleDetector.screenState}.`
);
});
await idleDetector.start({
threshold: 60000,
signal,
});
console.log("IdleDetector is active.");
window.setTimeout(() => {
controller.abort();
console.log("IdleDetector is stopped.");
}, 120000);
} catch (err) {
// Deal with initialization errors like permission denied,
// running outside of top-level frame, etc.
console.error(err.name, err.message);
}
};
main();
这也是一个渐进式增强的实际的范例,让 App 能够逐步支援更多的功能。
这个页面在勾选触发後,只要在 60 秒不活动後就会清除绘画的内容。这个应用案例可以想像这成被部署在公众场合供参观的使用者涂鸦。
Demo 连结: https://idle-detection.glitch.me/
在 Day01 的文章中有提到, JavaScript 会先经过语法解析後,产生结构树,代码生成後才...
-软件开发生命周期 (SDLC) – 设计 在(需求)分析中引出、收集、分析、指定、记录、验证、确...
谈谈插入排序(Insertion Sort) 在开始今天之前,先来看看影片(约2分钟)吧! http...
我们在使用props时有时会需要特别对传进来的资料做检查所以通常我们就会用以下几个资料类型来做验证:...
【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...