js内置对象---计时器对象

一、计时器对象简介

  • 计时器对象分类
  • 计时器对象分为一次性计时器,循环计时器,帧计时器(跟电脑的刷新频率有关)

二、一次性计时器

  • 计时器的参数有string||function delay ms
  • ms—延迟多少毫秒后执行

1. 一次性计时器的写法

  • 写法1
   window.setTimeout(function(){
       console.log("常规代码");
   },1000)    
  • 写法2
   //可以不写前缀window
   setTimeout(function(){
       console.log("常规代码");
   },1000)
  • 写法3
   //函数的提前声明
   setTimeout(loop,2000);
   function loop(){
       console.log("执行");
   }
  • 写法4
   function loop(){
       console.log("执行");
   }
   //字符串形式
   setTimeout("loop()",2000);

2. 清除计时器

  • 使用变量接收计时器对象
  • 返回值是数值
   var timer=setTimeout(function(){
       console.log("执行");
   },1000);
   console.log(timer);//1
   //清除计时器
   clearTimeout(timer);

三、循环计时器

  • 和一次性计时器一致,只不过是循环执行。

1. 一次性计时器的写法

  • 写法1
   setInterval(function(){
       console.log("执行");
   },1000)
  • 写法2
   setInterval(loop,1000);
   function loop(){
       console.log("执行");
   }
   setInterval("loop()",1000);

2. 清除计时器

  • 使用变量接收计时器对象
  • 返回值是数值
   var count=0;
   var timer;
   timer=setInterval(function(){
       count++;
       console.log(count);
       if(count>9)
       {
           console.log(timer);//1
           clearInterval(timer);
       }
   },1000)

四、帧计时器

  • 根据屏幕的刷新频率执行的计时器,不需要设置时间。
  • 回调函数执行次数通常是每秒60次。
   var count=0;
   loop();
   function loop(){
       count++;
       console.log(count);
       window.requestAnimationFrame(loop);
   }

1. 设置兼容性

   //设置兼容性
   var requestFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame ||window.msRequestAnimationFrame||function(callback){
       setTimeout(callback,1000/60);
   };
   var count=0;
   loop();
   function loop(){
       count++;
       console.log(count);
       requestFrame(loop);
   }

2. 移除计时器

   //设置兼容性
   var requestFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame ||window.msRequestAnimationFrame||function(callback){
       setTimeout(callback,1000/60);
   };
   var cancelFrame=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||function(timer){
       clearTimeout(timer);
   };
   //移除计时器
   var timer;
   var count=0;
   loop();
   function loop(){
       count++;
       console.log(count);
       if(count>19){
           cancelFrame(loop);
           return;
       }
       timer=requestFrame(loop);
   }

五、把一次性计时器写成循环计时器

1. 写法

   var num=0;
   loop();
   function loop(){
       num++;
       console.log("输出", num);
       setTimeout(loop,1000);
   }

2. 移除计时器

   var num=0;
   var timer;
   loop();
   function loop(){
       num++;
       console.log("输出", num);
       if(num>9){
           clearTimeout(timer);
           return;
       }
       timer=setTimeout(loop,1000);
   }

六、三个计时器的区别

  • 一次性计时器和循环计时器在浏览器窗口失去焦点的时候还会执行。
  • 帧计时器在浏览器窗口失去焦点的时候会自动暂停。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南初️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值