[英]How to stop the setInterval()?
下面是setInterval()
和clearInterval()
的脚本。
我已经搜索了clearInterval()
来停止setInterval()
…我实现了该代码,但无法正常工作。
我要在这里实现的目标是,例如,有8个捕食者和3个捕食者。当捕食者多于捕食者时,setInterval将开始,因此,捕食者将减少3个,而捕食者将增加3个。当猎物的数量达到0时,捕食者应停止增加,因为没有更多的猎物了。
这里的问题是,当猎物命中0时,捕食者仍在增加..我在clearInterval()
添加了它,但它不起作用..我可以知道出了什么问题吗?
<script>
function startAni() {
if ((document.getElementById('amount').value) >= (document.getElementById('amount5').value)) {
alert("Predator is more than prey! FRENZY TIME!");
var interval = setInterval(function () {
Remove3(), removevalue3(), Add(), addvalues();
if (document.getElementById('amount5').value = "0") {
alert("No more Prey!");
clearInterval(interval);
}
}, 5000);
} else {
alert("Prey is more than Predator! Revenge time!")
}
}
</script>
在此先感谢您的帮助!
您需要确保DOM上的ID为amount5
的实际input
,因为如果有,那么document.getElementById('amount5').value = "0"
将为true
,并将立即清除您的间隔...
但
if (document.getElementById('amount5').value = "0") {
应该
if (document.getElementById('amount5').value == "0") {
在javascript中,您使用双等于( ==
)进行比较。
这个:
if(document.getElementById('amount5').value = "0"){
您应该使用==
而不是=
,否则您的情况总是真实的。 话虽如此,该声明将立即终止计时器。
另一种查看方法是使用setTimeout
而不是setInterval
和clearInterval
:
function doAdd() {
Remove3(), removevalue3(), Add(), addvalues();
if (document.getElementById('amount5').value = "0") {
alert("No more Prey!");
// thats it, no more recursion as your stop condition has been met
}
else {
setTimeout(doAdd, 5000); // continue as there is more to be done
}
}
setTimeout(doAdd, 0); // start it off
您在设置间隔变量范围时出错。 您应该将其定义为全局变量。
如果在“ startAni”函数中定义它,则该变量不能由“ startAni”函数中的嵌套函数访问。
您应该定义为:
<script>
var interval;//define it here
function startAni() {
if ((document.getElementById('amount').value) >= (document.getElementById('amount5').value)) {
alert("Predator is more than prey! FRENZY TIME!");
interval = setInterval(function () { //do not redefined interval as var just use it here
....
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.