我的问题是计时器没有正确暂停。当我点击暂停时,看起来它已停止但实际上它继续循环,当我点击开始时它不会从我暂停的地方继续,而是从它到达的位置继续。
<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>
$(function (){
var reload = 1000/60;
var timer = null;
var startTime = 0;
var btn = $('.stopwatch a');
var count = $('.stopwatch span');
var pause = false;
$('.pause').click(function (){
pause = true;
});
$('.start').click(function (){
pause = false;
});
$('.reset').click(function (){
return ( (count.text('00:00:00,000')) && (timer = 0) );
});
function zero(num, length) {
if ( typeof(length) == 'undefined' ) length = 2;
while ( num.toString().length < length ) {
num = '0' + num;
}
return num;
}
function zero_format(time){
return zero(time.getUTCHours()) + ':' + zero(time.getMinutes()) + ':' + zero(time.getSeconds()) + ',' + zero(time.getMilliseconds());
}
$('.start').click( function (){
if ( !timer ){
startTime = new Date();
timer = setInterval( function (){
if ( pause ){
return;
}
var currentTime = new Date(new Date() - startTime);
count.text(zero_format(currentTime));
}, reload);
}
return false;
});
});
答案 0 :(得分:1)
你需要调整startTime变量,因为你仍然在计算第一次按下start时创建的datetime的时间差异
答案 1 :(得分:0)
$('.start')
有两个处理程序。
试试这个:Live Demo
$('.start').click(function (){
if ( !timer ){
startTime = new Date();
timer = setInterval( function (){
if ( pause ){
return;
}
var currentTime = new Date(new Date() - startTime);
count.text(zero_format(currentTime));
}, reload);
} else {
pause = false;
}
return false;
});
删除:
$('.start').click(function (){
pause = false;
});
更新1
如果您需要秒表,而不是圈计时器,那么这里是代码:Live Demo
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;
});
答案 2 :(得分:0)
我会将currentTime
提升到外部范围,并跟踪外部范围中最后一次打勾的时间。然后每次勾选,通过添加最后一个刻度和当前刻度之间的差异来更新currentTime
,而不是从开始以来的时间。这样就可以暂停了。
此外,您需要在首次暂停时添加到currentTime
,并在重新启动时重置最后一个勾号。