zoukankan      html  css  js  c++  java
  • 定时器和延时器(利用定时器制作倒计时)

    一、延时器(setTimeout)
    1.延时器(setTimeout)的工作方式是:当设定一个延时器是5s后进行时,并不代表它5s后就立即执行,只是代表它5s后会被加入队列,如果5s后,队列没有其他东西,那么延时器的代码会立即执行,否则会延迟执行。

    因此,关于延时器最重要的一点是:指定的时间间隔(如设置5s后执行),表示何时将延时器加入到队列,而不是何时真正执行代码。

     

    二、定时器(setInterval)
    1.定时器的一大特点是每隔一段时间(如每隔2s)就会执行,一直重复。这样有个问题:设定一个定时器a每隔2s执行一次,如果a执行的时间(executiveTime)大于时间间隔(2s),那么,第一次执行的a还没执行完第一次,就开始执行第二次了。

    js巧妙地避免了这个问题——即等到定时器的代码执行完后,再去将定时器的代码加入到队列中,所以定时器代码加入队列的最小时间间隔即指定间隔(因为理想状态是是定时器的执行时间在时间间隔内完成)。

    2.使用setInterval的问题
    (1)某些间隔会被跳过——如设置每个1s执行一次,如果该定时器代码执行时间大于1s,或者正好等于1s,那么,相当于代码执行时间正好等于间隔时间,那么,这个间隔时间就被执行时间占据了,所以就没有了间隔时间即没有间隔。


    利用定时器制作一个倒计时功能,有开始、暂停、继续、复位功能。
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
        <style>
            #content{display: block; 200px;height: 200px;border: 1px solid black;margin: 20px auto;text-align: center;line-height: 200px;font-size: 50px;}
            #btn{ 200px;height: 40px;border: 1px solid black;border-radius: 10px;margin: 20px auto;display: block;cursor: pointer;background: blue;color: #FFFFFF;font-size: 25px;}
        </style>
    </head>
    <body>
        <span id="content">
            100
        </span>
        <input type="button" id="btn" value="开始">//定义一个功能按钮
        <script>
            var ocontent = document.getElementById("content");
            var obtn = document.getElementById("btn");
            var start = ocontent.innerHTML;
            var num = ocontent.innerHTML;
            var timer = null;  //设置全局变量
            var onoff = 1;  //开关
            obtn.onclick = function(){
                if(onoff == 1){  //当开关等于1时,执行开始倒计时功能
                    clearInterval(timer);  //清除计时器,避免重复点击开关时,造成bug
                    timer=setInterval(function(){
                        if(num == 1){
                            num = "结束了"
                            obtn.value="复位"
                            clearInterval(timer);
                            onoff = 2;
                        }else{                        
                            num--;
                        }
                        ocontent.innerHTML = num;
                    },100)
                    onoff =0;  //“定义”到暂停的功能
                    obtn.value = "暂停"  //点击按钮时,obtn.value变为暂停
                }else if(onoff == 0){  //暂停功能
                    clearInterval(timer);
                    onoff = 1;  //暂停之后继续倒计时
                    obtn.value = "继续"    //obtn.value变为继续
                }else if(onoff == 2){  //启动复位功能
                    obtn.value = "开始";
                    onoff = 1;
                    num = start;
                    ocontent.innerHTML = start;
                }
            }
        </script>    
    </body>
    </html>

    效果如下:

  • 相关阅读:
    设计模式 对象结构型 代理模式
    设计模式 对象/类结构型 适配器模式
    设计模式 创建型 原型模式
    设计模式 创建型 建造模式
    Django REST framework使用及源码分析之权限
    Django REST framework使用及源码分析之验证
    某游戏公司运维开发python笔试题
    django中间件的5个方法以及csrf的装饰器用法
    Django源码理解一
    消息中间件-RabbitMQ
  • 原文地址:https://www.cnblogs.com/qiaowanze/p/11399260.html
Copyright © 2011-2022 走看看