javascript定时器循环

javascript定时器循环,javascript,timer,Javascript,Timer,我想创建一个计时器,一旦到达某个点,计时器就会重置,然后重新开始 现在,我已经设置了循环,作为测试,我希望它在5000毫秒(5秒)后重置。但是柜台上乱七八糟的 这里的WIP演示:而不是StimeTimeUT,考虑使用SETIFATION。它将自动重复,直到您清除间隔 setInterval(myMethod, 5000); function myMethod( ) { //this will repeat every 5 seconds //you can reset counter

我想创建一个计时器,一旦到达某个点,计时器就会重置,然后重新开始

现在,我已经设置了循环,作为测试,我希望它在5000毫秒(5秒)后重置。但是柜台上乱七八糟的


这里的WIP演示:

而不是StimeTimeUT,考虑使用SETIFATION。它将自动重复,直到您清除间隔

setInterval(myMethod, 5000);

function myMethod( )
{
  //this will repeat every 5 seconds
  //you can reset counter here
}

我同意Keyboard p的观点,您可能应该使用
setInterval
而不是
setTimeout
。然而,为了回答您最初的问题,您的计时器出现问题的原因是因为您的重复逻辑。不要使用:

var diff = (new Date().getTime() - start) - time;
window.setTimeout(instance, (100 - diff));
您不需要尝试和说明执行时间(我假设这就是您尝试使用
diff
所做的)。假设它可以忽略不计,然后使用:

setTimeout(instance, 100);

您的问题已经解决,如中所示。

在我单击演示之前,它会使我的浏览器崩溃吗<代码>:P在Firefox中计数器会重置…哈哈,不,这不是一个无限循环。我正在用当前计时器值更新范围的文本。。。你会看到,这是唯一一件弄糟的事情。你可能想看看这个问题的公认答案中的代码:不确定IE是否支持它,但是
Date.now()
new Date().getTime()干净一点我同意,只是要指出,他之所以要描述这个问题,是因为行
var diff=(new Date().getTime()-start)-time不需要那一行。他应该执行
window.setTimeout(实例,100)
而不是
window.setTimeout(实例,(100-diff))。他的问题解决了。你可以把它作为一个答案,因为它同样有效。OP然后可以决定该方法是否适合他们的整体计划。虽然setInterval在这种情况下通常是有意义的,但您的代码直接解决了当前的问题
随后清除间隔(并停止计时器):
清除间隔(计时器)有没有一种简单的方法可以让它增加1而不是100?例如,2.1秒是2100,有没有办法获得更多的小数,比如2.154秒,或者计时器上的2154秒?准确度不会精确到毫秒。浏览器以不同的方式评估超时/间隔。平均每13毫秒计算一次超时。因此,这取决于浏览器,尽可能具体。好吧,我不需要以毫秒为单位直观显示计时器,我只需要小数点后4位的精度,因为计时器将触发其他事件,需要根据计时器同步,2.4秒(2400秒与2418秒)会产生差异。这是一个WIP演示,我仍然需要添加循环,但这是我试图做的基本工作(最终,它不会是可视化的),正如我所说,超时和间隔在每个浏览器中的评估都不同。通常每14毫秒评估一次。也就是说,如果延迟1ms,实际上可能需要1到15分钟。所以你的计时器不会精确到一毫秒。甚至可能不到10毫秒,但在100毫秒的数量级上会非常接近。如果你必须在2418触发一个事件,你可以在ellapsed超过2418的时间触发它;这差不多是你能做的最好的了。