3

我可以每 60 秒运行一次函数:

        Timer: function() {
           setInterval(fxn, 60000)
        },

但是有没有办法在每分钟轮到运行一个函数?IE 在 11:20:00、11:21:00 等?

4

3 回答 3

10

你可以这样做setTimeout()

function onTheMinute(fn) {
  function ms() {
    var now = new Date();
    return (60 - now.getSeconds()) * 1000;
  }

  function timer() {
    fn();
    setTimeout(timer, ms());
  }
  setTimeout(timer, ms());
}

这会在下一分钟的边界上设置一个超时,并在发生这种情况时调用一个函数。每次都会为下一分钟设置一个新的计时器。

检查毫秒也会稍微准确一些,但无论如何计时器都不是那么准确。

于 2013-09-05T16:36:06.643 回答
1

在下一分钟轮流编程您的计时器的第一次执行,然后设置每分钟的间隔。

(function () {
    var nextExecution = ((60 - (new Date()).getSeconds()) * 1000),
        fnx = function () {
            document.getElementById("sec").innerHTML = (new Date()).getMinutes();
        };
    setTimeout(function () {
        fnx();
        setInterval(fnx, 60 * 1000);
    }, nextExecution)
}());
于 2013-09-05T16:51:52.560 回答
0

不。

JavaScript 是基于事件的。唯一的方法是每秒(甚至更频繁地)执行一个计时器,然后在正确的时间执行一个函数。

这是一个很好的教程,它的德语,但我认为谷歌翻译会有所帮助,

于 2013-09-05T16:33:53.587 回答