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;
});