2

毎秒カウントダウンするタイマーがあります。タイマーはゲームに使用されます。ユーザーは質問に答えるために最大 15 秒与えられます。ゲームに10個の質問があるとしましょう。タイマーは最初の質問にはうまく機能しますが、質問ごとにどんどんスピードアップしていきます。どんな提案でも大歓迎です。ありがとうございました!

コードはここにあります:

var timeInSecs;
var ticker;
function startTimer(secs) {
    timeInSecs = secs;
    ticker = setInterval("tick()", 1000); // every second
}
function tick() {
    var seconds = timeInSecs;
    if (seconds > 0) {
        timeInSecs--;
    }
    else if (seconds == 0) {
        document.getElementById("timeExpired").innerHTML = "Time expired!";
    }
    document.getElementById("countDown").innerHTML = seconds;
}
function myStopFunction() {
    clearInterval(ticker);
}​
4

4 に答える 4

4
else if(seconds==0)
        {
            // you should stop the timer here, and clear the interval
            myStopFunction();
            document.getElementById("timeExpired").innerHTML = "Time expired!";
        }

編集:補足

tick評価する文字列ではなく、関数を間隔に渡すことをお勧めします。eval を使用することは、一般的に危険なことであり、効率的ではありません。

setInterval(tick, 1000)

編集:別の補足事項

tick 関数をより冗長に (そして余分な variable なしでseconds)書くことができます。

    function tick(){
        document.getElementById("countDown").innerHTML = timeInSecs;
        if(! timeInSecs--){
            myStopFunction()                
            document.getElementById("timeExpired").innerHTML = "Time expired!";
        }
    }
于 2012-09-28T19:42:44.177 に答える
2

関数では--, のsecond代わりに変数を使用する必要があると思います。timeInSecondstick()

timeInSecondstoの値を指定したためですseconds。多分これが役立つでしょう。

于 2012-10-23T03:28:08.587 に答える
1

0になった時点でインターバルをクリアしているとは思えません。

定義myStopFUnction()しましたが、秒 == 0 の場合はおそらく呼び出さないでしょう。

試す:

else if (seconds == 0) {
    document.getElementById("timeExpired").innerHTML = "Time expired!";
    myStopFunction();
}

また、使用する必要があります===

于 2012-09-28T19:56:21.743 に答える
0
var timeInSecs;
var ticker;
function startTimer(secs) 
{
    timeInSecs = secs;
}

function tick() {
    var seconds = timeInSecs;
    if (seconds > 0) 
      timeInSecs--;
    else if (seconds == 0) 
    {
        document.getElementById("timeExpired").innerHTML = "Time expired!";
    }
    document.getElementById("countDown").innerHTML = seconds;
    ticker = setInterval("tick()", 1000); // every second
}

function myStopFunction() 
{
    clearInterval(ticker);
} ​
于 2012-09-29T00:15:50.590 に答える