每个“X”分钟的Javascript调用函数按时钟

时间:2017-09-06 03:39:27

标签: javascript setinterval clock

好的,我有:

function show_popup() {
    alert('Ha');
}

现在,我想要的是在每个 X 分钟 BUT 调用此函数作为参考时钟(实时)。

如果 X 为5,则下一个功能正常运行:

setInterval(function(){
    var date = new Date();
    var minutes = date.getMinutes().toString();
    var minutes = minutes.slice(-1); // Get last number

    if(minutes == 0 || minutes == 5)
    {
        show_popup(); // This will show the popup at 00:00, 00:05, 00:10 and so on
    }
}, 1000);

如果我将5分钟更改为4分钟,或者更改为3分钟或者更改为20分钟,如何才能使此功能正常工作?

我必须提到我无法从setinterval更改计时器,因此这意味着弹出窗口仅在您通过X分钟后在页面上时才会触发。我不希望这样。我想在特定时间显示弹出窗口,提供时钟参考。

2 个答案:

答案 0 :(得分:0)

您需要找到 X

multiples

为此,您可以使用modulo operation,所以:

if(minutes % X === 0) {
  show_popup();
}

模运算将在 a b 之间返回除法,如果为0,则表示 b

例如,如果您想每3分钟显示一次:

1 % 3 = 1
2 % 3 = 2
3 % 3 = 0 //show
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0 //show

等等......

答案 1 :(得分:0)

两种方法,只需运行代码即可查看结果(在Chrome浏览器中)

1.使用计时器,您可以在下一个刻度到来时更改周期,计时器不是那么精确



class MyInterval {
  constructor(defaultInterval, callback) {
    this.interval = defaultInterval
    this.callback = callback
    this._timeout = null
    this.tick()
  }

  tick() {
    const {
      interval,
      callback
    } = this
    this._timeout = setTimeout(() => {
      callback()
      this.tick()
    }, interval)
  }

  stop() {
    clearTimeout(this._timeout)
  }
  changeInterval(interval) {
    this.interval = interval
  }
}

const myInterval = new MyInterval(1000, () => console.log(new Date()))

setTimeout(() => {
  myInterval.changeInterval(2000)
}, 3500)


setTimeout(() => {
  myInterval.stop(2000)
}, 13500)




2.使用最小间隔,更快速反应,有最小限制,可能花费更多



class MyInterval {
  constructor(minimal, defaultInterval, callback) {
    this.minimal = minimal
    this.interval = defaultInterval
    this.callback = callback
    this._current = 0
    this._timeout = setInterval(() => {
      this._current++
        if (this._current >= this.interval) {
          this._current = 0
          callback()
        }

    }, minimal)


  }
  stop() {
    clearInterval(this._timeout)
  }
  changeInterval(interval) {
    this.interval = interval
  }
}

const myInterval = new MyInterval(1000, 1, () => console.log(new Date()))

setTimeout(() => {
  myInterval.changeInterval(2)
}, 3500)


setTimeout(() => {
  myInterval.stop()
}, 13500)