原生js实现计时器

文章地址  https://www.cnblogs.com/sandraryan/

点击开始计时,可以计次,暂停。点了暂停可以继续计时,计次,点击重置清空。

<!DOCTYPE html>
<html lang="en">

<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>
        .wrap {
            width: 90%;
            margin: 50px auto;
            background-color: #333333;
            text-align: center;
            padding: 50px 0;
        }

        .time {
            margin-bottom: 50px;
        }

        span {
            color: white;
            font-size: 100px;
        }

        .control button {
            width: 80px;
            height: 40px;
            border-radius: 7px;
            border: 1px solid #333;
            outline: none;
            font-size: 20px;
            color: white;
        }

        .control button:nth-child(1) {
            background-color: #90f62b;
        }

        .control button:nth-child(2) {
            background-color: #35b1f8;
        }

        .control button:nth-child(3) {
            background-color: #f5a123;
            display: none;
        }

        .control button:nth-child(4) {
            background-color: #f75629;
            display: none;
        }

        .time span:last-child {
            display: inline-block;
            width: 90px;
        }

        #show {
            color: white;
            font-size: 18px;
            margin: 20px;
        }
    </style>
</head>

<body>
    <div class="wrap">
        <div class="time">
            <span>00:</span>
            <span>00:</span>
            <span>00:</span>
            <span>000</span>
        </div>
        <div class="control">
            <button>启动</button>
            <button>复位</button>
            <button>计次</button>
            <button>暂停</button>
        </div>
        <div id="show"></div>
    </div>
    <script>
        // 获取元素
        var num = document.querySelectorAll(".time span");
        var start = document.querySelectorAll(".control button")[0];
        var reset = document.querySelectorAll(".control button")[1];
        var times = document.querySelectorAll(".control button")[2];
        var pause = document.querySelectorAll(".control button")[3];
        var show = document.getElementById("show");
        // 初始化时间值
        var hour = 0,
            minutes = 0,
            seconds = 0,
            ms = 0;
        // 创建定时器的变量
        var timer;
        // 创建时间数组
        var timeArr = [hour, minutes, seconds, ms];

        function fun() {
            // 设置定时器
            timer = setInterval(function () {
                // +=11 秒数最后一位数也会变化,+=10最后一位永远是0
                ms += 11;
                // 如果毫秒数大于0小于999,毫秒数的位置还是该毫秒数
                // 否则(大于999),毫秒数的位置替换为000,毫秒数重置为0,分钟++
                if (ms > 0 && ms < 999) {
                    num[3].innerHTML = ms;
                } else {
                    num[3].innerHTML = ‘000‘;
                    ms = 0;
                    seconds++;
                }
                // 如果秒数大于0并小于59
                if (seconds > 0 && seconds < 59) {
                    // 如果秒数小于10,秒数写为0和当前秒数(01-09)
                    if (seconds < 10) {
                        num[2].innerHTML = ‘0‘ + seconds + ‘:‘;
                    } else {
                        // 秒数大于10,秒数为当前值
                        num[2].innerHTML = seconds + ‘:‘;
                    }
                } else {
                    // 秒数超过59,重置为0,分钟++,秒数位置变成00
                    seconds = 0;
                    minutes++;
                    num[2].innerHTML = "00" + ‘:‘;
                }

                if (seconds > 59) {
                    // 如果秒数大于59,且分钟小于10,补0,分钟大于10,显示
                    if (minutes < 10) {
                        num[1].innerHTML = ‘0‘ + minutes + ‘:‘;
                    } else {
                        num[1].innerHTML = minutes + ‘:‘;
                    }
                    // 秒数大于59,分钟++ 显示分钟数
                    minutes++;
                    num[1].innerHTML = minutes + ‘:‘;
                    // 如果秒数小于59,显示00分钟
                    // 分钟变成0,小时++
                } else {
                    num[1].innerHTML = ‘00‘ + ‘:‘;
                    minutes = 0;
                    hour++;
                }

                // 如果,分钟数大于59,进入外层条件
                if (minutes > 59) {
                    // 如果小时小于10,小时处的内容为补0 + 小时数
                    if (hour < 10) {
                        num[0].innerHTML = ‘0‘ + hour + ‘:‘;
                    } else {
                        num[0].innerHTML = hour + ‘:‘;
                    }
                }
            }, 10);
        }
        // 封装一个函数
        // t作为计数器,作为每一条时间的序列号
        var t = 0;

        function counter() {
            // 用abcd获取num数组的各个下标的值
            var a = num[0].innerHTML;
            var b = num[1].innerHTML;
            var c = num[2].innerHTML;
            var d = num[3].innerHTML;
            // 函数调用,计时器++(d点一次加一条)
            t++;
            // 创建一个p元素,追加给展示区(展示每一条事件列表)
            var n = document.createElement(‘p‘);
            n.innerHTML = t + ‘.‘ + a + b + c + d;
            show.appendChild(n);
        }
        // 清除定时器
        function clear() {
            clearInterval(timer);
        }

        // 重置函数
        function reset() {
            // 清楚定时器
            clearInterval(timer);
            // 把时间重置
            hour = 0;
            seconds = 0;
            minutes = 0;
            ms = 0;
            // 页面元素赋值重置
            num[0].innerHTML = ‘0‘ + hour + ‘:‘;
            num[1].innerText = ‘0‘ + minute + ‘ : ‘;
            num[2].innerText = ‘0‘ + seconds + ‘ . ‘;
            num[3].innerText = ‘00‘ + ms;
        }

        // 开始按钮注册点击时间,隐藏开始重置按钮,计时暂停按钮出现
        // 调用函数开始运行整个计时器
        start.onclick = function () {
            start.style.display = "none";
            reset.style.display = "none";
            times.style.display = "inline-block";
            pause.style.display = "inline-block";
            fun();
        }
        // 点击停止按钮,隐藏停止计次按钮,开始重置按钮出现
        pause.onclick = function () {
            pause.style.display = "none";
            times.style.display = "none";
            start.style.display = "inline-block";
            reset.style.display = "inline-block";
            clear();
        }

        // 点击计次按钮,在展示区防放置当前时间值
        times.onclick = function () {
            counter();
        }
        // 点击重置按钮,重置页面元素,重置时间,清空页面内容
        reset.onclick = function () {
            reset();
            show.innerHTML = ‘‘;
        }
    </script>
</body>

</html>

that‘s all ~~~

原文地址:https://www.cnblogs.com/sandraryan/p/11619493.html

时间: 2024-11-06 03:46:19

原生js实现计时器的相关文章

原生JS封装运动框架

昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架. 正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装. 首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子,如下代码: #div{ width: 100px; height: 100px; background

原生JS封装Ajax插件(同域&amp;&amp;jsonp跨域)

抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正确的地方,还望指正^_^ 一.Ajax核心,创建XHR对象 Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一款引入XHR对象的浏览器,而IE5中的XHR对象是通过MSXML库中的一个ActiveX对象实现的,因此在IE中可能有3个版本,即MSXML2.XMLHttp.

原生 JS 中对象相关 API 合集

https://juejin.im/entry/58f8a705a0bb9f0065a4cb20 原文链接:https://microzz.com/2017/04/20/jsobject/ 原生 JavaScript 中对象相关 API 合集 - 对象篇.现在 jQuery 已经没有那么有优势了,原生 JS 赶紧学起来... -- 由microzz分享 Microzz [email protected] 主页 文章 标签 GitHub 关于我 掘金专栏 SegmentFault Vue音乐播放器

原生js重写《锋利的JS》之 轮播效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

原生JS实现简易转盘抽奖

我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述HTML与CSS,而JS基本每行都有注释,但这里CSS 也是起到了至关重要的一步,那就是控制背景色,以及结果的显示与隐藏,效果先给出,如下: 代码给出: <!DOCTYPE html> <html lang="zh"> <head> <meta ch

利用原生JS实现网页1920banner图滚动效果

内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920banner图的切换效果,并针对低分辨率电脑设备进行了适配,实现了JS代码与HTML代码的完全分离,符合w3c的标准使用规范,希望能给各位开发者朋友以帮助和参考.如发现有缺陷和不足,欢迎大家予以指正,如有更好的意见或解决方法,可在评论区交流互动.一下为代码内容: <!DOCTYPE html> <

原生JS写的ajax函数

参照JQuery中的ajax功能,用原生JS写了一个ajax,功能相对JQuery要少很多,不过基本功能都有,包括JSONP. 调用的方式分为两种: 1. ajax(url, {}); 2. ajax({}); 调用的方法参照JQuery的ajax,只是 不需要写$.ajax ,只需要写 ajax 就可以了. 代码如下: !function () { var jsonp_idx = 1; return ajax = function (url, options) { if (typeof url

原生js自动触发事件

熟悉jquery的童鞋都知道在jq中有一个方法可以自动触发事件,那就是trigger(),那么通过原生js又怎么模拟触发呢? js中添加一个主动触发事件的方法有dispatch.该方法能模拟用户行为,如点击(click)操作等. 标准使用dispatchEvent方法,IE6/7/8则使用fireEvent方法. dispatchEvent() 方法给节点分派一个合成事件. 语法如下: dispatchEvent(eventObj) eventObj 参数是一个描述事件的 ActionScrip

使用原生js的scrollTop,刷新进入页面定位到某一个dom元素

原生js的scrollTop即可,与jquery方法的区别是jquery做了兼容封装.我想要实现的功能是时间定位,根据当前时间定位到滚动区的时间位置.页面为移动端页面,上下固定位置,中部为1小时4格的选择区域,从0点到24点. 开始我想发出现了偏差,总想定位到某个dom,这样使得scrollTop一直是0,怎么设置都不行,后来仔细分析才发现要设置在超出当前可视区域的dom上才可以. 所以设置在外层overflow-x:scroll;的dom上即可,根据时间匹配dom位置,根据索引及每格的高度计算