@maz-ui/utils
Version:
Utils of maz-ui for JavaScript/TypeScript users
51 lines (50 loc) • 1.6 kB
JavaScript
import { isClient as i } from "./isClient.js";
class o {
constructor(t, e) {
this.callback = t, this.options = {
...this.defaultOptions,
...e
}, this.eventHandlerFunction = this.eventHandler.bind(this), i() && this.start();
}
eventHandlerFunction;
event = "visibilitychange";
timeoutHandler;
options;
defaultOptions = {
timeout: 5e3,
once: !1,
immediate: !0
};
isVisible = !1;
start() {
if (!i()) {
console.warn("[UserVisibility](start) you should run this method on client side");
return;
}
this.options.immediate && this.emitCallback(), this.addEventListener();
}
emitCallback() {
this.isVisible = document.visibilityState === "visible", this.callback({ isVisible: this.isVisible }), this.options.once && this.destroy();
}
eventHandler() {
document.visibilityState === "visible" && !this.isVisible ? (this.clearTimeout(), this.emitCallback()) : document.visibilityState === "hidden" && this.initTimeout();
}
clearTimeout() {
this.timeoutHandler && (clearTimeout(this.timeoutHandler), this.timeoutHandler = void 0);
}
initTimeout() {
this.clearTimeout(), this.timeoutHandler = setTimeout(this.emitCallback.bind(this), this.options.timeout);
}
addEventListener() {
document.addEventListener(this.event, this.eventHandlerFunction);
}
removeEventListener() {
document.removeEventListener(this.event, this.eventHandlerFunction);
}
destroy() {
this.removeEventListener(), this.timeoutHandler && clearTimeout(this.timeoutHandler);
}
}
export {
o as UserVisibility
};