繁体   English   中英

如何停止setInterval()?

[英]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而不是setIntervalclearInterval

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM