<!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>
欢迎大家评论、提异哦!