Строго говоря, setInterval()
был разработан для повторяющихся событий и setTimeout()
для событий с одним выстрелом.
Однако вы, как правило, обнаружите, что с setTimeout()
время будет постепенно "ползти".Я не пробовал это делать с интервалами в 1 минуту, но с 1-секундным таймером я обнаружил, что это происходит довольно часто.Часы, показывающие текущее время (с точностью до миллисекунды), будут показывать постоянное увеличение значения «сейчас» в миллисекундах.
См. http://jsfiddle.net/alnitak/LJCJU/ и настроить интервал, чтобы понять, что я имею в виду!
Итак, для большей точности я делаю это:
var timerHandler = function() {
var interval = 60000;
// do some stuff
...
var now = new Date();
var delay = interval - (now % interval);
setTimeout(timerHandler, delay);
};
Это идеально, если вы хотите, чтобы события таймера запускались синхронно с часами в вашей системе, а не в неустановленное время "примерно каждую минуту".