snappymail/dev/External/ifvisible.js

41 lines
882 B
JavaScript
Raw Normal View History

(doc => {
2021-08-10 23:07:26 +08:00
let idle = 'idle',
visible = 'visible',
status = visible,
timer = 0,
2020-08-24 17:26:19 +08:00
wakeUp = () => {
clearTimeout(timer);
2021-08-10 23:07:26 +08:00
status = visible;
2020-08-24 17:26:19 +08:00
timer = setTimeout(() => {
if (status === visible) {
2021-08-10 23:07:26 +08:00
status = idle;
dispatchEvent(new CustomEvent(idle));
2020-08-24 17:26:19 +08:00
}
}, 10000);
},
2020-08-24 17:26:19 +08:00
init = () => {
2021-08-10 23:07:26 +08:00
init = () => 0;
// Safari
2021-08-10 23:07:26 +08:00
addEventListener('pagehide', () => status = 'hidden');
// Else
2021-08-10 23:07:26 +08:00
doc.addEventListener('visibilitychange', () => {
2020-08-24 17:26:19 +08:00
status = doc.visibilityState;
doc.hidden || wakeUp();
});
2020-08-24 17:26:19 +08:00
wakeUp();
2021-08-10 23:07:26 +08:00
['mousemove','keyup','touchstart'].forEach(t => doc.addEventListener(t, wakeUp));
['scroll','pageshow'].forEach(t => addEventListener(t, wakeUp));
2020-08-24 17:26:19 +08:00
};
this.ifvisible = {
2020-08-24 17:26:19 +08:00
idle: callback => {
init();
2021-08-10 23:07:26 +08:00
addEventListener(idle, callback);
2020-08-24 17:26:19 +08:00
},
now: () => {
init();
return status === visible;
}
};
})(document);