以前的BUG :在我的stopwatch here中,如果我在第一秒开始之前暂停并快速恢复,它就不会更新秒表中的seconds
。所以,为了解决这个问题,我做了:
if (milliseconds >= 1000){
milliseconds %= 1000;
seconds++;
}
NEW BUG:现在,它会恰当地更新第二个。但是,如果我只是启动秒表(没有暂停),它会跳过第一秒并直接使它停留2秒。永远不会显示1秒。 (如果你不明白我在说什么,请自己试试。)
我该如何解决这个问题?
答案 0 :(得分:3)
永远不要忘记parseInt中的基数
var stringToInt = parseInt(yourString, 10);
您正在开始间隔,但在某些时候您只是清除超时。请改用clearInterval
clearInterval(timeUpdate);
编辑:秒数问题:让我们检查timeElapsed == 1000
的代码。首先,将秒设置为
seconds = parseInt(timeElapsed / 1000, 10) + prev_seconds;
会产生seconds == 1
如果1
milliseconds >= 1000
if (milliseconds >= 1000){
milliseconds %= 1000;
seconds++;
}
顺便说一下,分钟和小时也是如此。
EDIT2:暂停/恢复问题。让我们暂停虚构的手表01:437然后恢复它。
timeElapsed将从0开始计数。在563毫秒后,它应该切换到2秒和000毫秒。但是会发生什么?
seconds = parseInt(timeElapsed / 1000, 10) + prev_seconds;
这将导致seconds == 1
timeElapsed == 563
。正确地说它应该更像
seconds = Math.floor((parseInt(timeElapsed, 10) + prev_milliseconds) / 1000) + prev_seconds;
同样显然是几分钟和几小时。
结果FIDDLE