0
<html>
<head>
<script>

window.onload = function(){
    setTimeout(function(){

        alert("hi");    
    }, 4000);

    var time = 0;
    var para = document.getElementsByTagName("p");
    setInterval(function(){

        time += 1;

        para[0].innerHTML = time;

    },1);

}
</script>
</head>
<body>
<p></p>
</body>
</html>

这是我的代码,我想计算显示警报的时间量,我希望它是 4000,但它在 4 秒后才变成 9xx。为什么会发生这种情况?

4

2 回答 2

3

setInterval不是很精确。它做出的唯一保证是调用之间的时间大于或等于经过的时间间隔。在您的情况下,主要问题之一是最小间隔实际上被指定为四毫秒。

new Date().getTime()您可以使用(或,给定支持)获得完全准确的测量值Date.now()——以毫秒为单位,通常是您在做任何与测量时间相关的事情时应该使用的(甚至是大多数动画,只是因为它更简单)。

于 2013-10-11T00:20:15.050 回答
2

为了扩展我在评论中所说的话,这应该有效:

setTimeout(function(){
    alert("hi");    
}, 4000);

var startTime = new Date();
var para = document.getElementsByTagName("p");
setInterval(function(){
    var timeElapsed = new Date() - startTime;
    para[0].innerHTML = timeElapsed;
},1);

现在,即使您不是每毫秒都进入,而是每 28 毫秒,您的时间显示仍然正确。

于 2013-10-11T00:23:08.713 回答