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 函数(并且没有额外的变量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而不是timeInSeconds-- 。tick()

因为你给了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 回答