<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>00:00:00:00</div>
<button >开始</button>
<button disabled>暂停</button>
<button disabled>继续</button>
<button disabled>重置</button>
<script>
// 秒表功能分析
// 核心思路:
// 定义一个变量,根据定时器,每秒执行一次,每次执行++自增操作
// 变量存储的数值,就会每秒+1
// 现在需要的记录效果,是每0.01秒,也就是10毫秒执行一次
// 根据累计的数值,执行进位 ms 如果达到 100,就是1秒
// 如果 秒 达到 60 就是 1分钟
// 如果 分钟 达到 60 就是 1小时
// 获取按钮的标签对象
var oBtnStart = document.querySelectorAll('button')[0];
var oBtnPause = document.querySelectorAll('button')[1];
var oBtnContinue = document.querySelectorAll('button')[2];
var oBtnReset = document.querySelectorAll('button')[3];
var hour = minutes = seconds = millisecond = 0;
// 定义存储 时 分 秒 毫秒 字符串的变量
// 如果直接在 millisecond seconds minutes hour 变量上进行 拼接操作,会影响 ++操作的执行
// 单独的建立变量,来存储累加时间的执行结果
var ms = '';
var s = '';
var m = '';
var h = '';
// 因为定时器,是定义在函数内部,
// 必须定义一个全局变量,来存储定时器
// 在函数外部可以调用,终止定时器
var time = 0;
// 获取div标签对象
var oDiv = document.querySelector('div');
// 开始按钮
oBtnStart.onclick = function(){
// 点击开始按钮,执行函数,执行秒表计时
timer();
oBtnStart.disabled = true;
oBtnPause.disabled = false;
oBtnContinue.disabled = true;
oBtnReset.disabled = true;
}
// 暂停按钮
oBtnPause.onclick = function(){
// 点击暂停按钮,清除定时器,终止秒表执行
clearInterval(time);
oBtnStart.disabled = true;
oBtnPause.disabled = true;
oBtnContinue.disabled = false;
oBtnReset.disabled = false;
}
// 继续按钮
oBtnContinue.onclick = function(){
// 点击继续按钮,继续执行定时器
timer();
oBtnStart.disabled = true;
oBtnPause.disabled = false;
oBtnContinue.disabled = true;
oBtnReset.disabled = true;
}
// 重置按钮
oBtnReset.onclick = function(){
// 点击重置按钮,将所有的数据,都恢复到0的状态
// 所有变量存储的数据都是 0 , div中的内容,也恢复到0
hour = minutes = seconds = millisecond = 0;
oDiv.innerHTML = '00:00:00:00'
oBtnStart.disabled = false;
oBtnPause.disabled = true;
oBtnContinue.disabled = true;
oBtnReset.disabled = true;
}
// 计时函数
function timer(){
// 赋值操作,将定时器,存储在全局作用域变量中
time = setInterval(function(){
millisecond++;
if( millisecond == 100){
seconds++;
millisecond = 0;
}
if( seconds == 60 ){
minutes++;
seconds = 0;
}
if( minutes == 60 ){
hour++;
minutes = 0;
}
// 补零操作
// 如果记录的时间小于0,要做补零操作
if( millisecond < 10 ){
ms = '0' + millisecond;
}else{
ms = millisecond;
}
if( seconds < 10 ){
s = '0' + seconds;
}else{
s = seconds;
}
if( minutes < 10 ){
m = '0' + minutes;
}else{
m = minutes;
}
if( hour < 10 ){
h = '0' + hour;
}else{
h = hour;
}
// 每次执行,返回一个记录时间的字符串
// 将这个字符串,写入到div中
oDiv.innerHTML = ` ${h}:${m}:${s}:${ms} `
},10);
}
</script>
</body>
</html>
实现效果:
当点击开始时:
当点击暂停时:
当点击继续时: