【发布时间】: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(或let或const,视情况而定)进行声明。
标签: javascript html setinterval repl.it