31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
import uuidv4 from "../../func/utils/uuidv4";
|
||
import ClassName from "../../container/ClassName";
|
||
import { Injectable } from "../../container/Injectable";
|
||
|
||
@ClassName('WindowActiveState')
|
||
@Injectable()
|
||
export default class WindowActiveState {
|
||
private isFocus = false;
|
||
private uuid = uuidv4();
|
||
|
||
constructor() {
|
||
if (self !== top) return null;
|
||
localStorage.setItem('whuuid', this.uuid);
|
||
document.addEventListener('visibilitychange',
|
||
() => (document.visibilityState !== 'hidden') && (localStorage.setItem('whuuid', this.uuid))
|
||
);
|
||
addEventListener('focus', () => this.isFocus = true);
|
||
addEventListener('blur', () => this.isFocus = false);
|
||
}
|
||
|
||
// 当前实例是否激活
|
||
get(): boolean {
|
||
// 当前窗口获得了焦点 优先级最高
|
||
if (this.isFocus) return true;
|
||
// 可视性
|
||
if (!document.hidden) return true;
|
||
// 全部在后台,使用唯一id判断
|
||
return this.uuid === localStorage.getItem('whuuid')
|
||
}
|
||
}
|