первую очередь, не следует использовать счетчик-щелочное отсчет времени в JavaScript, так как setTimeout (foo, 1000) не так точен, как вы думали. FYI: http://ejohn.org/blog/how-javascript-timers-work/
изменить код, чтобы он мог отсчитывающий правильно, попробуйте выполнить следующие действия вместо:
function countdown() {
var secs = 60,
startTime = new Date().getTime(), // <-- new here
endTime = startTime + secs * 1000; // <-- new here
function timer() {
var counter = document.getElementById("counter");
secs = Math.floor((endTime - new Date().getTime())/1000); // <-- modify here
counter.innerHTML = "0:" + (secs< 10 ? "0" : "") + String(secs);
if(secs > 0) {
setTimeout(timer, 1000);
} else {
alert("Game over, you did not get to finish the game on time :(");
document.getElementById('memory_board').innerHTML = "";
newBoard();
}
}
timer();
}
countdown();
иметь этот код в цикле, это может быть хорошо завернул его в качестве объекта и проход какой вы хотите после обратный отсчет закончился.
function newCounter(_secs, _callback) {
var executeWhenEnd = _callback,
secs = _secs;
function countdown() {
var startTime = new Date().getTime(), // <-- new here
endTime = startTime + secs * 1000; // <-- new here
function timer() {
var counter = document.getElementById("counter");
secs = Math.floor((endTime - new Date().getTime())/1000); // <-- modify here
counter.innerHTML = "0:" + (secs< 10 ? "0" : "") + String(secs);
if(secs > 0) {
setTimeout(timer, 1000);
} else {
callback();
}
}
timer();
}
return {
countdown: countdown
};
}
поэтому каждый раз, когда вы хотите иметь счетчик, вы можете получить новый счетчик и начать отсчет всякий раз, когда вы хотите. пример:
var counter1 = newCounter(60, function(){
//fire after 60 seconds
alert("Game over, you did not get to finish the game on time :(");
document.getElementById('memory_board').innerHTML = "";
newBoard();
}),
counter2 = newCounter(5, function() {
//fire after 5 seconds.
});
counter1.countdown(); // start countdown
counter2.countdown(); // start countdown
Надеется, что это помогает.
OP требует, чтобы счетчик уменьшался каждую секунду, а код, который вы предоставили, запускает функцию раз в минуту, не уменьшая счетчик. – David
Извините, но вы действительно должны прочитать и понять код еще раз, прежде чем downvote, и, возможно, попробовать его с DEMO, чтобы увидеть, что он делает именно то, что хочет OP ... @David – baao