借鉴:https://www.cnblogs.com/momo798/p/9177767.html
- 本文涉及 JS闭包、节流
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
timeOut: '',
};
},
created(){
this.isTimeOut();
},
methods: {
// 节流throttle代码(时间戳+定时器)
throttle(fn, wait) {
var timer = null;
var startTime = Date.now();
return function() {
var curTime = Date.now();
var remaining = wait - (curTime - startTime);
var context = this;
var args = arguments;
clearTimeout(timer);
if (remaining <= 0) {
fn.apply(context, args);
startTime = Date.now();
} else {
timer = setTimeout(fn, remaining);
}
}
},
handle() {
clearInterval(this.timeOut);
// console.log(Math.random());
if (this.$route.path == '/Login') {
return
}
this.timeOut = setInterval(()=>{
this.$message.success('长时间未操作,请重新登录')
this.$router.push({name: 'Login'})
},1000*60*10)
// },10000)
},
isTimeOut() {
document.body.onmouseup = this.throttle(this.handle, 1000);
document.body.onmousemove = this.throttle(this.handle, 1000);
document.body.onkeyup = this.throttle(this.handle, 1000);
document.body.onclick = this.throttle(this.handle, 1000);
document.body.ontouchend = this.throttle(this.handle, 1000);
window.addEventListener('resize', this.throttle(this.handle, 1000));
window.addEventListener('scroll', this.throttle(this.handle, 1000));
},
}
};
</script>
<style>
#app1 {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
height: 100vh;
}
</style>
本文介绍了一种使用JavaScript实现的节流(throttle)技术,通过时间戳加定时器的方法来限制函数调用频率,有效防止用户频繁操作导致的资源浪费。文中详细展示了如何在用户界面的各种交互事件中应用节流函数,包括鼠标移动、按键释放、触摸结束等,以检测用户活动状态并在长时间无操作后自动注销登录,提高了系统的响应性和安全性。

3110

被折叠的 条评论
为什么被折叠?



