Javascript 计时器不工作

Javascript 计时器不工作,javascript,jquery,Javascript,Jquery,我的问题是计时器没有正确暂停。当我点击暂停时,它看起来已经停止,但实际上它继续循环,当我点击开始时,它不会从我暂停的地方继续,而是从它到达的位置继续 <div class="stopwatch"> <span>00:00:00,000</span><br /> <div class="btn start">play</div> <div class="btn pause">pause<

我的问题是计时器没有正确暂停。当我点击暂停时,它看起来已经停止,但实际上它继续循环,当我点击开始时,它不会从我暂停的地方继续,而是从它到达的位置继续

<div class="stopwatch">
    <span>00:00:00,000</span><br />
    <div class="btn start">play</div>
    <div class="btn pause">pause</div>
    <div class="btn reset">reset</div>
</div>

00:00:00000
玩 暂停 重置
$(函数(){
var重新加载=1000/60;
var定时器=null;
var startTime=0;
var btn=$('秒表a');
变量计数=$('.stopwatch span');
var暂停=假;
$('.pause')。单击(函数(){
暂停=正确;
});
$('.start')。单击(函数(){
暂停=错误;
});
$('.reset')。单击(函数(){
返回((count.text('00:00:00000'))和(&(timer=0));
});
函数零(num,length){
如果(typeof(length)=‘未定义’)length=2;
而(num.toString().length
您需要调整startTime变量,因为您仍在使用datetime计算时间差,datetime是在第一次按下start时创建的。

您有两个处理程序处理
$('.start')

试试这个:

删除此项:

$('.start').click(function (){
    pause = false; 
});
更新1

如果您需要秒表,而不是计时圈,则代码如下:


我会将
currentTime
提升到外部范围,并跟踪外部范围中最后一个勾号的时间。然后,对于每个勾号,通过添加最后一个勾号和当前勾号之间的差值来更新
currentTime
,而不是添加自开始以来的时间。这样它将被适当地暂停


此外,您还需要在第一次暂停时添加到
currentTime
,并在重新启动时重置最后一个勾号。

代码对我来说工作正常。你能把你的问题说清楚一点吗?我发现在暂停->开始后它会出错。看起来计时器实际上并没有停止,我想这就是为什么它是“暂停”而不是停止。就像计算圈速一样,但它会继续计数。@FAngel:这是因为
var currentTime=new Date(new Date()-startTime)。暂停时,此计算不会根据暂停的时间进行调整。我不清楚这是否是故意的。@MattBurland我知道。我的评论只是为了证实存在问题。因为Ergec告诉我们一切都很好,更新了答案和演示。
$('.start').click(function (){
    pause = false; 
});
var savedTime;
var additional = 0;

$('.pause').click(function (){
    savedTime = new Date(); 
    pause = true; 
});

$('.reset').click(function (){
    count.text('00:00:00,000');
    clearInterval(timer);
    timer = null;
    additional = 0;
});

$('.start').click( function (){  
    if ( !timer ){  
              startTime = new Date();  
        timer = setInterval( function (){  
            if ( pause ){
                return;
            }

            currentTime = new Date(new Date() - startTime - additional);  
            count.text(zero_format(currentTime));  
        }, reload);

        pause = false;
    }

    if(pause == true) {
        additional += new Date() - savedTime;
        pause = false; 
    }

   return false;
});