1

私は次の機能を持っています:

$(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と、タイマーが停止/一時停止しますが、これも機能します。問題は、停止した場所から継続して、タイマーを再度開始することです。

tI = setInterval("setTimer()", 1000);divをクリックしてみまし#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);
}

現時点では、時間が一時停止しますが、この関数が起動されると継続しません...では、この時点からタイマーを開始するにはどうすればよいですか? 私は近いと思います

4

2 に答える 2

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);
}
于 2012-01-29T22:24:54.510 に答える
1

以下で試してみませんか?

$('#r').click(function() {
    oT = new Date(); //this will move the offset date to the resume time..
    tI = setInterval(setTimer, 1000);
});
于 2012-01-29T22:22:06.297 に答える