【发布时间】:2021-12-27 21:01:07
【问题描述】:
有没有办法让 setInterval 一次只工作一次? 我的代码应该这样工作:
- 您手动输入秒数;
- “div”用作计时器,一直运行到 0。
如果您单击“单击我”一次,它将按预期工作。 但是,如果您以足够快的速度多次单击该按钮,则偶数侦听器将同时工作与您单击的次数一样多。
let button = document.getElementById('button');
let input = document.getElementById('input');
let timer = document.getElementById('timer');
function timerRunner () {
let startTime = input.value;
if (startTime <= 0) {
console.log('The number is <=0')
} else {
do {
timer.textContent = startTime;
let counter = startTime;
let interval = setInterval(()=> {
console.log(counter);
counter--;
timer.textContent = counter;
if (counter === 0) {
clearInterval(interval);
}
}, 1000);
} while (typeof (timer.textContent) == "number");
}
}
button.addEventListener('click', timerRunner)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.centeralizer {
display: block;
width: 200px;
margin: 20vh auto;
}
#input {
display: block;
margin-bottom: 35px;
width: 150px;
}
#button {
display: inline-block;
margin-right: 35%;
}
#timer {
display: inline-block;
}
</style>
<script src="index.js" defer></script>
</head>
<body>
<div class="centeralizer">
<input id="input" placeholder="Input the number" type="number">
<button id="button">Click me</button>
<div id="timer">0</div>
</div>
</body>
</html>
【问题讨论】:
-
JavaScript 是单线程且非抢占式的,因此不会同时运行。
标签: javascript setinterval clearinterval