Fork me on GitHub

用setTimeout()替代setInterval()

为什么要用setTimeout()替代setInterval()?

应用场景:速度切换

通过改变duration的值更改setTimeout()执行时间从而更改事件发生的速度。

设置变量duration,在

setInterval(() = {
// 执行代码
}, duration)

中,当你调用setInterval()时,只调用一次duration,那么当你更改duration时,setInterval()无法读取新的变化后的duration值。

如何用setTimeout()替代setInterval()?

举个例子:

let n = 0;
let id = setInterval(() => {
  n+=1;
  output.innerText=n; // 输出n
  if(条件){
    window.clearInterval(id);
  }
}, 100);


用setTimeout()替代setInterval():

let n = 0;
setTimeout(function fn(){
  n+=1;
  output.innerText=n; // 输出n
  if(条件){
    setTimeout(fn, 500);
  }
}, 100);


添加变量duration后:

let n = 0;
let duration = 100; // 给duration赋初值
setTimeout(function fn(){
  n+=1;
  output.innerText=n; // 输出n
  if(条件){
    setTimeout(fn, duration); // 在setTimeout()中(延时的)递归调用且不满足条件时,中断是默认的
  }
}, duration);


这样在调用setTimeout()时每次的都会读取duration,得到变化的新duration值。

 

总体讲的还比较笼统,(先挖坑,后期填上)。

posted @ 2020-05-29 22:49  Lynn_z  阅读(1801)  评论(0编辑  收藏  举报