为什么警报框在JS中每分钟弹出一次

时间:2018-10-31 18:29:43

标签: javascript

我正在尝试在小时内弹出一个警报框。弹出的那一刻,它每秒弹出一次。为什么会这样?

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);

2 个答案:

答案 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);