原理
class UserActivityDetector {
private isUserActive: boolean = false;
private activityTimeout: number;
private activityTimer: NodeJS.Timeout | null = null;
constructor(timeout: number = 3000) {
this.activityTimeout = timeout;
this.initialize();
}
private initialize() {
window.addEventListener("mousemove", this.handleUserActivity);
window.addEventListener("click", this.handleUserActivity);
window.addEventListener("scroll", this.handleUserActivity);
window.addEventListener("keydown", this.handleUserActivity);
this.startActivityTimer();
}
private handleUserActivity = () => {
this.isUserActive = true;
this.restartActivityTimer();
};
private startActivityTimer() {
this.activityTimer = setTimeout(() => {
this.isUserActive = false;
}, this.activityTimeout);
}
private restartActivityTimer() {
if (this.activityTimer) {
clearTimeout(this.activityTimer);
}
this.startActivityTimer();
}
public isUserCurrentlyActive(): boolean {
return this.isUserActive;
}
public destroy() {
window.removeEventListener("mousemove", this.handleUserActivity);
window.removeEventListener("keydown", this.handleUserActivity);
if (this.activityTimer) {
clearTimeout(this.activityTimer);
}
}
}
export default UserActivityDetector;
使用方法
import UserActivityDetector from "@/utils/userActivityDetector";
const userActivityDetector = new UserActivityDetector();
const isUserActive = userActivityDetector.isUserCurrentlyActive();
console.log(isUserActive )