如何在每个磁贴中激活时间功能并在浏览器关闭后继续计时器?

时间:2014-02-09 05:24:13

标签: javascript jquery timer

我想使用html multiple div显示计时器。我能够加载第一个div的计时器,但我想我的计时器on只有我点击的div。对于第一个div,它的工作正常,但其他div无法启动timer.Timer也会在浏览器刷新或关闭时停止。我希望在浏览器刷新或由其他人关闭时继续计时器。我在下面给出了我的代码:

(function($){
        var row =document.getElementById('row').value;
        //alert("I am testing"+row);
        $.extend({
            APP : {                
                formatTimer : function(a) {
                    if (a < 10) {
                        a = '0' + a;
                    }                              
                    return a;
                }, 

                startTimer : function(dir) {
                    var a;
                    // save type
                    $.APP.dir = dir;
                    // get current date
                    $.APP.d1 = new Date();
                    switch($.APP.state) {
                        case 'pause' :
                            // resume timer
                            // get current timestamp (for calculations) and
                            // substract time difference between pause and now
                            $.APP.t1 = $.APP.d1.getTime() - $.APP.td;                            
                        break;
                        default :
                            // get current timestamp (for calculations)
                            $.APP.t1 = $.APP.d1.getTime(); 
                            // if countdown add ms based on seconds in textfield
                            if ($.APP.dir === 'cd') {
                                $.APP.t1 += parseInt($('#cd_seconds').val())*1000;
                            }    
                        break;
                    }                                   
                    // reset state
                    $.APP.state = 'alive';   
                    $('#' + $.APP.dir + '_status').html('Running');
                    // start loop
                    $.APP.loopTimer();
                },

                pauseTimer : function() 
                {
                    // save timestamp of pause
                    $.APP.dp = new Date();
                    $.APP.tp = $.APP.dp.getTime();
                    // save elapsed time (until pause)
                    $.APP.td = $.APP.tp - $.APP.t1;
                    // change button value
                    $('#' + $.APP.dir + '_start').val('Resume');
                    // set state
                    $.APP.state = 'pause';
                    $('#' + $.APP.dir + '_status').html('Paused');
                },

                stopTimer : function() {
                    // change button value
                    $('#' + $.APP.dir + '_start').val('Restart');                    
                    // set state
                    $.APP.state = 'stop';
                    $('#' + $.APP.dir + '_status').html('Stopped');
                },

                resetTimer : function() 
                {
                  // reset display
                  $('#' + $.APP.dir + '_ms,#' + $.APP.dir + '_s,#' + $.APP.dir + '_m,#' + $.APP.dir + '_h').html('00');                 
                  // change button value
                  $('#' + $.APP.dir + '_start').val('Start');                    
                  // set state
                  $.APP.state = 'reset';  
                  $('#' + $.APP.dir + '_status').html('Reset & Idle again');

                },
                endTimer : function(callback) 
                {
                  // change button value
                  $('#' + $.APP.dir + '_start').val('Restart');
                  // set state
                  $.APP.state = 'end';
                  // invoke callback
                  if (typeof callback === 'function') 
                  {
                    callback();
                  }    
                },    

                    loopTimer : function() {
                    var td;
                    var d2,t2;
                    var ms = 0;
                    var s  = 0;
                    var m  = 0;
                    var h  = 0;
                    if ($.APP.state === 'alive') {
                        // get current date and convert it into 
                        // timestamp for calculations
                        d2 = new Date();
                        t2 = d2.getTime();   
                        // calculate time difference between
                        // initial and current timestamp
                        if ($.APP.dir === 'sw') {
                            td = t2 - $.APP.t1;
                        // reversed if countdown
                        } else {
                            td = $.APP.t1 - t2;
                            if (td <= 0) {
                                //if time difference is 0 end countdown
                                $.APP.endTimer(function(){
                                    $.APP.resetTimer();
                                    $('#' + $.APP.dir + '_status').html('Ended & Reset');
                                });
                            }    
                        }    
                        // calculate milliseconds
                        ms = td%1000;
                        if (ms < 1) {
                            ms = 0;
                        } else {    
                            // calculate seconds
                            s = (td-ms)/1000;
                            if (s < 1) {
                                s = 0;
                            } else {
                                // calculate minutes   
                                var m = (s-(s%60))/60;
                                if (m < 1) {
                                    m = 0;
                                } else {
                                    // calculate hours
                                    var h = (m-(m%60))/60;
                                    if (h < 1) {
                                        h = 0;
                                    }                             
                                }    
                            }
                        }

                        // substract elapsed minutes & hours
                        ms = Math.round(ms/100);
                        s  = s-(m*60);
                        m  = m-(h*60);                                
                        // update display

                        //alert("I am testing"+row);
                        $('#' + $.APP.dir + '_ms').html($.APP.formatTimer(ms));
                        $('#' + $.APP.dir + '_s').html($.APP.formatTimer(s));
                        $('#' + $.APP.dir + '_m').html($.APP.formatTimer(m));
                        $('#' + $.APP.dir + '_h').html($.APP.formatTimer(h));
                        // loop
                        $.APP.t = setTimeout($.APP.loopTimer,1);

                    } else {
                        // kill loop
                        clearTimeout($.APP.t);
                        return true;
                    }  

                }

            }    

        });

        $('#sw_start').live('click', function() {
        $.APP.startTimer('sw');
        });  

我的html代码如下:

 <li  id='sw_start'>
    <div>
        <span id="sw_h">00</span>:
        <span id="sw_m">00</span>:
        <span id="sw_s">00</span>:
        <span id="sw_ms">00</span>
    </div>
 </li>

 <li  id='sw_start'>
    <div>
        <span id="sw_h">00</span>:
        <span id="sw_m">00</span>:
        <span id="sw_s">00</span>:
        <span id="sw_ms">00</span>
    </div>
 </li>

0 个答案:

没有答案