我正在尝试在小时内弹出一个警报框。弹出的那一刻,它每秒弹出一次。为什么会这样?
function popup() {
var today = new Date();
var currentMinute = today.getMinutes();
var currentHour = today.getHours();
if ( currentMinute == "00") {
alert("another hour has passed. it is now hour " + currentHour + " of the day!");
}
console.log( "popup" + currentMinute) ;
}
setInterval(function() { popup(); }, 1000);
答案 0 :(得分:1)
每秒出现一次弹出窗口的原因是,您使用setInterval
的间隔为1000
秒,即1
秒。因此,您的popup()
函数每秒被调用一次。时间达到偶数小时(例如3:00:00)后,currentMinute
的值将是00
一整分钟,因此当函数获得一秒钟后(3:00:01)再次调用,则if语句仍然计算为true,并再次显示弹出窗口。然后在3:00:02、3:00:03等,直到3:01:00。
您可以将间隔更改为1分钟(1000 * 60
),以使其在同一分钟内不会被多次调用,或者设置一些变量来记录显示弹出窗口的小时数,并检查是否为好吧。
以下是第一种方法的示例:
function popup() {
var today = new Date();
var currentMinute = today.getMinutes();
var currentHour = today.getHours();
if (currentMinute === 0) {
alert("another hour has passed. it is now hour " + currentHour + " of the day!");
}
console.log("popup" + currentMinute);
}
setInterval(popup, 1000 * 60);
答案 1 :(得分:0)
如果您希望弹出窗口在每小时的第一秒发生,您仍然需要每秒检查一次时间。如果像@herohtar所说的那样,您在弹出代码中放置一个变量,则可以将弹出窗口限制为每小时仅一次。
下面的代码是基于您的代码的,为了简化起见,我做了最少的重构:
var hourOfLastPopup = -1;
function popup() {
var today = new Date();
var currentMinute = today.getMinutes();
var currentHour = today.getHours();
if ( currentMinute === 0 && hourOfLastPopup !== currentHour) {
hourOfLastPopup = currentHour;
alert("another hour has passed. it is now hour " + currentHour + " of the day!");
}
console.log( "popup" + currentMinute) ;
}
setInterval(function() { popup(); }, 1000);