所以我认为我很接近,但我所写的内容开始以更大的值递增,并且运行时间越长,速度越快。我认为这是未正确清除间隔的问题。请尽可能提供帮助。
<html>
<head>
<script type="text/javascript">
function setTimer(){
var timer = (((Math.floor(Math.random() * 6))+1)*1000);
clearInterval(interval);
var interval = setInterval(updateCounter, timer);
}
function updateCounter(){
var counter = document.getElementById("counter");
var count = parseInt(counter.innerHTML);
count++;
counter.innerHTML = count;
setTimer();
}
</script>
</head>
<body style="margin:5%;" onload="setTimer()">
<div id="counter">1</div>
</body>
</html>
最佳答案
您的interval
变量是setTimer
的局部变量。 clearInterval(interval);
将不起作用,因为您传递的是 undefined
(interval
的值)。它不会因变量提升而引发错误,但您传递给clearInterval
的值肯定是未定义
。
修复#1:
在 setTimer
之外声明 interval
:
var interval;
function setTimer(){
var timer = (((Math.floor(Math.random() * 6))+1)*1000);
clearInterval(interval);
interval = setInterval(updateCounter, timer); // no redeclaring here
}
修复 #2:
由于您是在再次设置间隔之前清除间隔,因此您可以使用 setTimeout
,因为它完全符合您的需要:
function setTimer() {
var timer = (((Math.floor(Math.random() * 6))+1)*1000);
setTimeout(updateCounter, timer); // no clearing is needed this time
}
注意:
您的 timer
变量将在 1-6 秒之间。你说你希望它是 1-8,所以使用:
var timer = (Math.floor(Math.random() * 8) + 1) * 1000;
关于javascript - 如何创建一个每 1-8 秒递增 1 的计数器(随机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47777087/