• js多个计时器互不影响触发


    前段时间有个要实现发短信互不影响的倒计时效果,但是没有实现,就换成了另一种方式,可是心里总是放不下,就问了朋友,结果没想到这么简单……

    以下是实现的demo,关于语法的讲解,以及原理在注释中都有提到,有需要的可以根据自己的具体需求来做改动:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <button class="time" type="button">点击倒计时</button><br><br>
            <button class="time" type="button">点击倒计时</button><br><br>
            <button class="time" type="button">点击倒计时</button><br><br>
            <button class="time" type="button">点击倒计时</button><br><br>
            <button class="time" type="button">点击倒计时</button><br><br>
            <button class="time" type="button">点击倒计时</button><br><br>
        </body>
        <script type="text/javascript">
        /** document.querySelectorAll()与getElementsByClassName一样,返回NodeList集合
        *   NodeList集合不是一个数组, 用不了数组的forEach方法
            可以用css的方法选取元素
            Array.prototype.forEach.call()
            Array.prototype.forEach.call(a, function)  等于 a.forEach(function)
            (这是因为Nodelist集合并不是一个真正的数组,用不了数组的方法,只能用这种方法使用, 或者把他转换成数组在使用
    )
    
        */
            Array.prototype.forEach.call(document.querySelectorAll('.time'), function (value, key, arr) {
                // 初始化属性
                value.isDown = false;
                value.onclick = function () {
                    // 当属性为false时进入倒计时方法,同时isDown变为true
                    if (!this.isDown) {
                        // 定时器和剩余的时间和定时器绑定到调用他的内阁元素身上
                        this.time = 5;
                        this.isDown = true;
                        startTime(this)
                    }
                }
            })
            function startTime(ob) {
                ob.innerHTML = '(' + ob.time + ')';
                // setInterval(Expression,DelayTime)设置循环事件
                ob.timeer = setInterval(function () {
                    ob.time -= 1;
                    if (ob.time === 0) {
                        // 倒计时为0时清除循环事件
                        clearInterval(ob.timeer);
                        // 状态属性变为false
                        ob.isDown = false;
                        ob.innerHTML = '倒计时完毕,点击再次倒计时';
                    } else {
                        ob.innerHTML = '(' + ob.time + ')';
                    }
                }, 1000)
            }
        </script>
    </html>

    以上是整理的朋友的代码,有问题的朋友也可以共同探讨

  • 相关阅读:
    java导入导出下载Excel,xls文件(带下拉框)
    java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载
    layui文件上传中如何先判断后再弹出文件选择框
    下载excle文件之工具
    eclipse 配置JDK
    layer实现关闭弹出层刷新父界面功能详解
    兼容ie9以下支持媒体查询和html5
    layui学习地址
    MATLAB拟合正态分布
    Matlab文件操作
  • 原文地址:https://www.cnblogs.com/wangfengzhu/p/6297520.html
Copyright © 2020-2023  润新知