好的,我有:
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分钟后在页面上时才会触发。我不希望这样。我想在特定时间显示弹出窗口,提供时钟参考。
答案 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)