JavaScript秒表开始、暂停、继续、重置功能的实现及连击的优化

首页 / 新闻资讯 / 正文

  • JS中秒表的计时,是练习定时器的最好的方式之一,它包含了定时器的创建、清除、变量等相关问题,而秒表的功能实现是多样化的,比如:特定按钮的disabled、是否需要秒表的记录等。这里我用事件的委托的方法来实现秒表四个功能,譬如下面的代码,这里没有设置花哨的样式(主要还是审美力的问题~~~),这里主要体现JS的代码思路,首先,先贴出一个gif图,让大家先看一下效果,欢迎大家评论、提异。

JavaScript秒表开始、暂停、继续、重置功能的实现及连击的优化

<!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>         #box {             border: 1px solid black;             margin: 0 auto;             width: 200px;             height: 200px;         }          .show {             text-align: center;             font-size: 30px;             margin: 20px auto;         }          button:nth-of-type(1) {             margin-left: 7px;//为了让button按钮视觉上居中         }     </style> </head>  <body>     <div id="box">         <div class="show">00:00:00:00</div>         <button name="btn1">开始</button>         <button name="btn2" -disabled>暂停</button>         <button name="btn3" -disabled>继续</button>         <button name="btn4" -disabled>重置</button>     </div>     <script>         // 变量的定义         var oBox = document.querySelector('#box');         var oShow = document.querySelector('.show');         var time = 0; //全局定时器名         var h = 0;    //时,计时全局变量         var m = 0;    //分,计时全局变量         var s = 0;    //秒,计时全局变量         var ms = 0;   //1毫秒*10,计时全局变量         var hStr = 0; //时,存储计时后的显示数据         var mStr = 0; //分,存储计时后的显示数据         var sStr = 0; //秒,存储计时后的显示数据         var msStr = 0;//1ms*10,存储计时后的显示数据         //全局计时变量,是为了防止定时器清除时,数据清零          // 点击事件         oBox.onclick = function (e) {             //当然这里的参数e.target应当有兼容,主要是针对低版本IE浏览器 ||scrElement...             //这里就不写了             var eTarget = e.target;             if (eTarget.getAttribute('name') == 'btn1') {                 setTimeStr();             }             if (eTarget.getAttribute('name') == 'btn2') {                 clearInterval(time);             }             if (eTarget.getAttribute('name') == 'btn3') {                 setTimeStr();             }             if (eTarget.getAttribute('name') == 'btn4') {                 // 将所有的变量、内容恢复至初始状态                 h = 0;                 m = 0;                 s = 0;                 ms = 0;                 hStr = 0;                 mStr = 0;                 sStr = 0;                 msStr = 0;                 clearInterval(time);                 oShow.innerHTML = '00:00:00:00';             }         }          // 计时器         function setTimeStr() {             //防止调用函数时,多次创建定时器             clearInterval(time);             // 创建定时器             time = setInterval(function () {                 ms++;                 if (ms == 100) {                     ms = 0;                     s++;                 }                 if (s == 60) {                     s = 0;                     m++;                 }                 if (m == 60) {                     m = 0;                     h++;                 }                 if (h > 99) {                     h = 0;                 }                 msStr = ms >= 10 ? ms : '0' + ms;                 sStr = s >= 10 ? s : '0' + s;                 mStr = m >= 10 ? m : '0' + m;                 hStr = h >= 10 ? h : '0' + h;                 //每次定时,都有向页面写入内容                 return oShow.innerHTML = `${hStr}:${mStr}:${sStr}:${msStr}`;             }, 10)         }      </script> </body>  </html> 

欢迎大家评论、提异哦!