【问题标题】:Why is setInterval not working when trying to make a countdown为什么尝试倒计时时 setInterval 不起作用
【发布时间】:2020-03-19 23:52:30
【问题描述】:

我正在尝试在 javascript 中创建一个计数器,并且我使用 setInterval 每毫秒更改一次计时器,但它不会更改计时器。除非我重新加载页面,否则计时器是相同的。 我的代码: HTML 文件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>repl.it</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <h1 id="final"> <b id="year"></b>:<b id="month"></b>:<b id="days"></b>:<b id="minutes"></b>:<b id="seconds"></b>:<b id="milli"></b></h1>
    <h1 id="end" hidden>Counter is done</h1>
    <script src="script.js"></script>
  </body>
</html>

我的js:

year = document.getElementById("year")
month = document.getElementById("month")
days = document.getElementById("days")
milli = document.getElementById("milli")
minutes = document.getElementById("minutes")
seconds = document.getElementById("seconds")
currentDate = new Date()
snapDay = new Date("Nov 25, 2019 0:0:0")
it = setInterval(function(){
  if(currentDate.getMinutes() == snapDay.getMinutes() && currentDate.getDate() == snapDay.getDate() && snapDay.getFullYear() == currentDate.getFullYear() && currentDate.getSeconds() == snapDay.getSeconds() && currentDate.getMilliseconds() == snapDay.getMilliseconds()){
    final.hidden = true
    end.hidden = false
    clearInterval(it)
  }
  theMonth = currentDate.getMonth()
  if(theMonth == 10){
    month.innerHTML = "3"
  }else if(theMonth == 11){
    month.innerHTML = "2"
  }else if(theMonth == 12){
    month.innerHTML = "1"
  }
  year.innerHTML = snapDay.getFullYear() - currentDate.getFullYear()
  days.innerHTML = currentDate.getDate() - snapDay.getDate()
  minutes.innerHTML = currentDate.getMinutes() - snapDay.getMinutes()
  seconds.innerHTML = currentDate.getSeconds() - snapDay.getSeconds()
  milli.innerHTML = currentDate.getMilliseconds() - snapDay.getMilliseconds()
},01)

【问题讨论】:

  • 你的变量都应该用var声明
  • 另外你可能想初始化currentDateinside定时器函数,否则它永远不会改变。
  • @Pointy 我已经创建了其他使用 var 声明变量的 javascript 程序,并且程序运行良好。
  • :faceplam: @Pointy 谢谢,这是错误。
  • 那么问题是不使用var 意味着您正在制作全局 变量,这可能会在浏览器JavaScript 中导致一些非常奇怪的问题,因为全局变量是属性window 对象。说真的,我的强烈建议是习惯于使用var(或letconst,视情况而定)进行声明。

标签: javascript html setinterval repl.it


【解决方案1】:

所以在@Pointy 帮助我之后,我发现错误是我在 setInterval 之外声明了 date(),这不是 setInterval 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多