Javascript定时器分为循环定时器和延时定时器
<script>
//循环定时器 每秒输出当前的秒数
setInterval(() => {
console.log(‘当前秒数=‘+new Date().getSeconds())
}, 1000)
//延时定时器 3秒后输出
setTimeout(() => {
console.log(‘此字段由延时定时器打印‘)
}, 3000);
</script>
<script>
//用来记录定时器的id
var timer = null
//事件绑定
document.querySelector(‘#begin‘).onclick = function(){
timer = setInterval(() => {
console.log(‘当前秒数=‘+new Date().getSeconds())
}, 1000)
console.log(‘此循环定时器id=‘+timer)
}
document.querySelector(‘#over‘).onclick = function(){
//利用之前保存的timer清除循环定时器
clearInterval(timer)
console.log(‘清除此循环定时器‘)
}
</script>
<script>
//用来记录定时器的id
var timer = null
//事件绑定
document.querySelector(‘#begin‘).onclick = function(){
timer = setTimeout(() => {
console.log(‘当前秒数=‘+new Date().getSeconds())
}, 3000);
console.log(‘此延时定时器id=‘+timer)
}
document.querySelector(‘#over‘).onclick = function(){
//利用之前保存的timer清除延时定时器
clearTimeout(timer)
console.log(‘清除此延时定时器‘)
}
</script>
可以看到,第一次点击触发定延时定时器之后,3秒后输出了当前的秒数。第二次点击触发定延时定时器之后,在3秒内清除了此定时器,导致后面不再输出,说明此定时器已被清除
另外,即使定时器被清除,再创建新的定时器时,不会再返回之前的id值,返回的id值会依次累加
<script>
var time = 60
setInterval(()=>{
time--
document.querySelector(‘#msg‘).innerHTML = time
},1000)
</script>
这是pc上chrome浏览器的运行结果,切换到其他标签也不影响此页面的定时器运行(切换出去时是59秒,几秒后切换回来是53秒)
苹果手机上不好截图,我试了59秒时候切换到其他标签,等20秒再切换回来,发现还是58/57的样子,说明浏览器没有后台权限的情况下,定时器会被中断,但是切换回来后依然可以正常执行下去。只是切换浏览器标签就这样,切换到其他app就更不用说了。当前安卓机另说,主要还是后台运行的权限问题。
//Timer组件
<script>
export default {
data () {
return {
msg: ‘‘
}
},
mounted(){
setInterval(() => {
console.log(‘当前秒数=‘+new Date().getSeconds())
}, 1000)
}
}
</script>
<script>
export default {
data () {
return {
msg: ‘‘,
timer:null //接收定时器id
}
},
mounted(){
this.timer = setInterval(() => {
console.log(‘当前秒数=‘+new Date().getSeconds())
}, 1000)
},
beforeDestroy(){
console.log(‘此组件将被销毁‘)
clearInterval(this.timer)
}
}
</script>
原文:https://www.cnblogs.com/OrochiZ-/p/12863276.html