做一个网页秒表遇到的问题

如题,实现一个网页秒表,初始思路是,设置一个函数,函数中一个key值每1毫秒自增1,然后根据key值计算出时,分,秒,毫秒对应的值,然后输出:

逻辑代码是这样的:

var key=0;
function timekeeper() {
key++
const millis=key%1000
const second=Math.floor(key/1000)
const minute=Math.floor(key/(1000*60))
const hour=Math.floor(key/(1000*60*60))
document.getElementById('millis').innerText=millis
document.getElementById('second').innerText=second
document.getElementById('minute').innerText=minute
document.getElementById('hour').innerText=hour
}
function computer() {
timer=setInterval('timekeeper()',1)
}

点击开始按钮触发computer() 函数,每1毫秒自增,想法是好的,但是,出现了巨大的延迟,搞不明白,逻辑是没有问题的,那问题是什么呢?我往timekeeper函数里加了一端语句——console.log('1')。然后右击网页,点击检查(N)(我用的是谷歌浏览器),然后点击按钮运行代码。结果是这样的

显然代码的执行并不如预期,这是因为setInterval指定的是“开始执行”之间的间隔,并不考虑每次任务执行本身所消耗的事件。因此实际运行中,大多数情况下,两次执行之间的间隔会小于指定的时间。比如,setInterval指定每100ms执行一次,每次执行需要5ms,那么第一次执行结束后95毫秒,第二次执行就会开始。如果某次执行耗时特别长,比如需要105毫秒,那么它结束后,下一次执行就会立即开始。这就意味着,我们不能用setInterval实现精确的时间控制。所以用计算的方法实现秒表显然是不现实的,即使把间隔时间调大。不精准,秒表就没有意义。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();