【发布时间】:2020-06-18 21:40:11
【问题描述】:
我正在尝试编写一个简单的 tabata 计时器。直到现在它仍然有效,但是当我尝试根据存储在变量中的值重复计数更多次时,问题就出现了。 所以,假设我们从 10 开始到 0,我们想要重复这个计数两次。会说:当我按下按钮时,在计数开始之前,程序将检查带有次数的变量是否为 NaN 或其中是否有数字。如果是 NaN 因为我不想重复,它只是从 10 开始倒数到 0 并停止。好的,这部分有效。但是如果我说我想重复倒计时两次呢?我将我想要重复的次数放入名为“var times”的变量中,比如说 2,然后我会使用一个 for 循环,例如:
for(var i=0; i<times; i++){}
但是当我开始倒计时时,它不会重复两次,而是跳过许多数字作为时间变量值。这是为什么呢?
提前致谢
这是我的代码。
var times = 2;
var counter = 0;
var operation;
document.getElementById("timer").textContent = 10;
function calculate(){
counter = document.getElementById("timer").textContent
operation = setInterval(function(){
if(counter >= 1 && counter <= 10){
counter -- ;
document.getElementById("timer").textContent = counter;
}
else if(counter == 0){
clearInterval(operation);
document.getElementById("timer").textContent = 10;
}
},1000);
}
document.getElementById("btn").addEventListener("click", function(){
for(var i=0; i<times; i++){
calculate();
}
})
.btn{
position: absolute;
width: 100%;
top: 20%;
margin:auto;
text-align: center;
}
.timer{
position: absolute;
width: 100%;
top:30%;
margin:auto;
text-align: center;
font-size: 10rem;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<div class="container">
<div class="btn">
<button id="btn">
<h1>Click me</h1>
</button>
</div>
<div class="timer">
<p id="timer"></p>
</div>
</div>
<script src="main.js"></script>
</body>
</html>
【问题讨论】:
-
究竟什么是“简单的tabata计时器”?
-
因为你多次调用
setInterval,导致多次递减/递增。 -
顺便说一句,你可能不应该使用
NaN,而是使用null,因为NaN有一些你可能不想要的属性,例如它不等于它自己 (NaN != NaN)
标签: javascript function timer repeat