22、定时器

定时器

setInterval();

定时循环器。setInterval是window上的方法,所以不用定义,程序自己会去GO中找。

setInterval()演示

var time = 1000;   
var i = 0;
setInterval(function () {
    i ++;
    console.log(i);
},time ); // 每隔1000毫秒执行一次
time = 2000;  // 再给time赋值没用,只取第一次赋值的值

setInterval()的时间不精准

注意: setInterval的时间是很不精准的。

var time = 1000;   
var firstTime = new Date().getTime();
setInterval(function () {
	var lastTime = new Date().getTime();
    console.log(lastTime - firstTime);
    firstTime = lastTime; // 以便于下次再减(第二轮的开始时间就是第一轮的结束时间)
},time ); 

image-20221013060024329

每一个setInterval()都有唯一标识

var timer =  setInterval(function() {},1000);
var timer2 =  setInterval(function() {},1000);
var timer3 =  setInterval(function() {},1000);

image-20221013060818919

setTimeout();

真正的定时器,意思是延迟多长时间之后再执行程序,并且只执行一次。

 setTimeout(function() {
     console.log('张杰很帅');
 },1000);

image-20221013062250121

clearInterval();

每一个setInterval()都有唯一标识

var timer =  setInterval(function() {},1000);
var timer2 =  setInterval(function() {},1000);
var timer3 =  setInterval(function() {},1000);

按照唯一标识可以清除setInterval

var time = 1000;   
var i = 0;
var time = setInterval(function () {
    i ++;
    console.log(i); // 打印停不下来
    if(i > 3) {
        clearInterval(time);  // 给我停
    }
},time ); 

打印到4是因为i++是先用后变,所以if判断的时候是3,打印的时候++了 所以是

image-20221013061655680

clearTimeout();

清除定时任务

每一个setTimeout()都有唯一标识

var timer =   setTimeout(function() {},1000);
var timer2 =  setTimeout(function() {},1000);
var timer3 =  setTimeout(function() {},1000);

按照唯一标识可以清除setTimeout

image-20221013063036504

 var timer = setTimeout(function() {
     console.log('张杰很帅');
 },1000);
 clearTimeout(timer); // 清除定时任务

全局对象window上的方法,内部函数this指向window

setInterval()和setTimeout()的function的this都指向window,因为setInterval()和setTimeout()都是window上的方法

注意: setInterval(“fun.c()”,1000);

另一种展现形式(基本不用)

// 间隔1000毫秒执行引号中的代码。
var timer = setInterval("console.log('杰');",1000);
 clearInterval(timer);

image-20221013063938913

练习题

计时器,到三分钟停止!

<style>
        input {
            width: 100px;
            border: 1px solid rgba(0, 0, 0, 0.8);
            text-align: center;
            font-size: 20px;
            font-weight: bold;
        }

        label {
            font-size: 20px;
            font-weight: bold;
        }
    </style>
<body>
        <span>
            <label>minutes:</label>
            <input type="text" value="0">
        </span>
        <span>
            <label>seconds:</label>
            <input type="text" value="0">
        </span>
    <script type="text/javascript">
        var minutesNode = document.getElementsByTagName('input')[0];
        var secondsNode = document.getElementsByTagName('input')[1];
        var minutes = 0;
        var seconds = 0;
        var timer = setInterval(function() {
            seconds ++;
            if(seconds == 60) {
                seconds = 0;
                minutes ++;
            }
            secondsNode.value = seconds;
            minutesNode.value = minutes;
            if(minutes == 3) {
                clearInterval(timer);
            }
        },1000)
    </script>
</body>
ds;
            minutesNode.value = minutes;
            if(minutes == 3) {
                clearInterval(timer);
            }
        },1000)
    </script>
</body>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

好好学习_fighting

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

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

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

打赏作者

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

抵扣说明:

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

余额充值