概述
js中定时器有两种,一个是循环执行setInterval,另一个是定时执行setTimeout
一、循环执行(setInterval)
顾名思义,循环执行就是设置一个时间间隔,每过一段时间都会执行一次这个方法,直到这个定时器被销毁掉
用法是setInterval(“方法名或方法”,“延时”), 第一个参数为方法名或者方法,注意为方法名的时候不要加括号,第二个参数为时间间隔
常见方法。在data中声明一个变量,定时器绑定到变量中,然后在beforeDestory中销毁这个定时器
举个例子:
方案一:
首先我在data函数里面进行定义定时器名称
<template>
<section>
<h1>hello world~</h1>
</section>
</template>
<script>
export default {
data() {
return {
timer: null // 定时器名称
};
},
mounted() { // 定时器一般写mounted() 生命周期内
this.timer = (() => {
// 某些操作
console.log(1);
}, 1000) // 1000毫秒
},
// 最后在beforeDestroy()生命周期内清除定时器:
beforeDestroy() {
clearInterval(this.timer);
this.timer = null;
}
};
</script>
方案一有两点不好的地方,引用尤大的话来说就是:
- 它需要在这个组件实例中保存这个 timer,如果可以的话最好只有生命周期钩子可以访问到它。这并不算严重的问题,但是它可以被视为杂物。
- 我们的建立代码独立于我们的清理代码,这使得我们比较难于程序化的清理我们建立的所有东西。
方案二:
通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时
const timer = setInterval(() =>{
// 某些定时器操作
}, 500);
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {
clearInterval(timer);
this.timer = null;
})
综合来说,我们更推荐使用方案2,使得代码可读性更强,一目了然。
二、定时执行 (setTimeout)
定时执行setTimeout是设置一个时间,等待时间到达的时候只执行一次,但是执行完以后定时器还在,只是没有运行
用法是setTimeout(“方法名或方法”, “延时”); 第一个参数为方法名或者方法,注意为方法名的时候不要加括号,第二个参数为时间间隔
<template>
<section>
<h1>hello world~</h1>
</section>
</template>
<script>
export default {
data() {
return {
timer: null, // 定时器名称
};
},
mounted() {
this.timer = setTimeout(() => { // 定时器一般写mounted() 生命周期内
// 某些操作
console.log(1)
},1000); // 1000毫秒
},
beforeDestroy() { // 最后在beforeDestroy()生命周期内清除定时器:
clearTimeout(this.timer);
this.timer = null;
}
};
</script>
本人总结定时器两点缺一不可:
- 在mounted生命周期内设置定时器setInterval或setTimeout
- 在beforeDestory生命周期内清除一下定时器,方法 clearInterval()或者 clearTimeout() ,意思就是 需要在页面销毁的时候清除掉,不然会一直存在,消耗性能,最后奔溃浏览器!
若有错误的地方麻烦指正一下写在评论区,多谢!
最后
以上就是缓慢向日葵为你收集整理的Vue中使用定时器setInterval和setTimeout的全部内容,希望文章能够帮你解决Vue中使用定时器setInterval和setTimeout所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复