我的秒表中的奇怪虫子

时间:2014-04-30 05:57:45

标签: javascript jquery

以前的BUG :在我的stopwatch here中,如果我在第一秒开始之前暂停并快速恢复,它就不会更新秒表中的seconds。所以,为了解决这个问题,我做了:

            if (milliseconds >= 1000){
                milliseconds %= 1000;
                seconds++;
            }

NEW BUG:现在,它会恰当地更新第二个。但是,如果我只是启动秒表(没有暂停),它会跳过第一秒并直接使它停留2秒。永远不会显示1秒。 (如果你不明白我在说什么,请自己试试。)

jsFiddle

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

  1. 永远不要忘记parseInt中的基数

    var stringToInt = parseInt(yourString, 10);
    
  2. 您正在开始间隔,但在某些时候您只是清除超时。请改用clearInterval

    clearInterval(timeUpdate);
    
  3. 编辑:秒数问题:让我们检查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