使用clearInterval()后如何继续计时器;

时间:2012-01-29 22:12:13

标签: javascript jquery clearinterval

我有以下功能:

$(document).ready(function() {
    $('#p').click(function() {
        $('#s1').hide();
        gameStart(); <-starts timer
        $('#s2').show();
    });

    $('.b4').click(function() {
        clearInterval(tI); <-stops the time
    });
    $('#r').click(function() {
        tI = setInterval("setTimer()", 1000); <-not working, should continue the timer again
    });
});

当点击div #p时,它将启动一个带计时器的游戏,这一切都有效。现在,如果我单击div .b4它将停止/暂停计时器,这也有效。问题是再次启动计时器,从停止计时器继续。

我在点击div tI = setInterval("setTimer()", 1000);时尝试了#r,但问题是它会启动计时器,但它不会从停止时开始继续。它将继续,但从它应该是的时间,如果它没有停止/停顿。

那怎么解决这个问题呢?我想暂停时间(想想我有这个部分的权利),然后点击#r

再次继续

这是我的计时器功能的构建方式:

function gameStart() {
    setBlocks();
    tM = $('#a1 div.tm');
    hS = $('#a1 div.hs');
    oT = new Date();
    tI = setInterval("setTimer()", 1000);
    setHs();
    $('.ht').click(hint);
    $('.b3').click(reset);
}


//Set timer
function setTimer() {
    var n = new Date();
    tM.text(getTimeText(n.getTime() - oT.getTime()));
}

//Build timer
function getTimeText(v) {
    var vH = Math.floor(v / 3600000);
    var vM = Math.floor((v - (vH * 3600000)) / 60000);
    var vS = Math.floor((v - (vH * 3600000) - (vM * 60000)) / 1000);
    return set2Digit(vH) + ':' + set2Digit(vM) + ':' + set2Digit(vS);
}

function set2Digit(ov) {
    var os = '0' + ov;
    return os.substr(os.length - 2, 2);
}

- 编辑 -

通过这个html,我有时间展示:<div class="tm">00:00:00</div>

- EDIT2-- 好的,创造了一个新功能。它抓住了暂停的时间,所以从这一点开始,时间应该继续:

$('#r').click(function() {
        $('#s1').hide();
        tI = setInterval("continueTimer()", 1000); //NEW
        $('#s2').show();
    });

//Test
function continueTimer() {
    divObj = document.getElementById("tm");
    tM.text(divObj.innerText);
}

此刻,暂停但暂停此功能的时间暂停...那么如何从这一点开始计时器?我想我很亲近

2 个答案:

答案 0 :(得分:2)

这是因为在setTimer方法中您正在创建一个new Date对象。因此,每次执行此方法时,都将占用当前时间。如果要继续停止计时器而不是每次都创建new Date对象,请在计时器启动变量时保持开始日期,然后在setTimer方法中使用该变量。

修改以下方法并添加全局变量。

var initialTime;
function setTimer() {
    tM.text(getTimeText(initialTime.getTime() - oT.getTime()));
    initialTime.setMilliseconds(1000);
}

function gameStart() {
    setBlocks();
    tM = $('#a1 div.tm');
    hS = $('#a1 div.hs');
    oT = new Date();
    initialTime = new Date();
    setTimer();
    tI = setInterval("setTimer()", 1000);
    setHs();
    $('.ht').click(hint);
    $('.b3').click(reset);
}

答案 1 :(得分:1)

你能在下面试试,

$('#r').click(function() {
    oT = new Date(); //this will move the offset date to the resume time..
    tI = setInterval(setTimer, 1000);
});