在达到刷新浏览器的最后期限后,如何停止执行倒数计时器

问题描述 投票:0回答:1

这是JavaScript的外观。我尝试搜索解决方案,但找不到。请我需要详细的解决方案。在网上我一直看到Cookie,但在这种情况下我不知道如何使用它。

  function countDown() {
      var now = new Date();
      var eventDate = new Date(2020, 5, 22);

      var currentTime = now.getTime();
      var eventTime = eventDate.getTime();

      var remTime = eventTime - currentTime;

      var s = Math.floor(remTime / 1000);
      var m = Math.floor(s/60);
      var h = Math.floor(m/60);
      var d = Math.floor(h/24);

      h %= 24;
      m %= 60;
      s %= 60;

      h = (h < 10) ? "0" + h: h;
      m = (m < 10) ? "0" + m: m;
      s = (s < 10) ? "0" + s: s;

      document.getElementById("days").textContent = d;
      document.getElementById("days").innerText = d;

      document.getElementById("hours").textContent = h;
      document.getElementById("minutes").textContent = m;
      document.getElementById("seconds").textContent = s;

      var t = setTimeout(countDown, 1000);

      if (d == 0 && h == 0 && m == 0 && s == 0) {
        clearTimeout(t);
        document.getElementById("demo").innerHTML = "Happy Birthday!"
      }
  }
  countDown();
</script>
javascript countdowntimer
1个回答
0
投票

代码的麻烦在于日期检查逻辑。

如果日期时间(或其一部分)与您要检查的值相同,则使用==进行检查只会给您真实的答复。

但是,您需要检查日期是否已经过去。为此,您需要使用<<=运算符。

这里是我的意思的例子。信息被替换为console.log,您可以重新执行问题中的DOM编辑。

  function countDown() {
      var now = new Date();
      var eventDate = new Date(2020, 4, 22); // 22 May 2020

      var currentTime = now.getTime();
      var eventTime = eventDate.getTime();

      var remTime = eventTime - currentTime;

      var s = Math.floor(remTime / 1000);
      var m = Math.floor(s/60);
      var h = Math.floor(m/60);
      var d = Math.floor(h/24);

      h %= 24;
      m %= 60;
      s %= 60;

      h = (h < 10) ? "0" + h: h;
      m = (m < 10) ? "0" + m: m;
      s = (s < 10) ? "0" + s: s;

      var t = setTimeout(countDown, 1000);

      // This if statement only runs exactly on eventDate
      if (d == 0 && h == 0 && m == 0 && s == 0) {
        document.getElementById("demo").innerHTML = "Happy Birthday!"
      }
      
      // This if statement will run if we're past or exactly on eventDate
      if (remTime <= 0) {
        clearTimeout(t);
      }
      
      // This console.log shows that the numbers become negative after the date
      console.log(remTime, d,h,m,s);
  }
  countDown();
© www.soinside.com 2019 - 2024. All rights reserved.