计时器不工作

时间:2013-01-15 13:38:10

标签: javascript jquery

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

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

3 个答案:

答案 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,并在重新启动时重置最后一个勾号。