1

下面是setInterval()clearInterval()..的脚本

我一直在寻找clearInterval()停止setInterval()...我实现了该代码,但它不起作用..

我在这里想要实现的是,例如,有 8 个捕食者和 3 个猎物。当 Predator 比 Prey 多时 setInterval 将开始,因此 Prey 将减少 3,而 Predator 将增加 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>

非常感谢您的帮助!

4

4 回答 4

7

您需要确保inputDOM 上有一个带有 id的实际值,amount5因为如果有,那么document.getElementById('amount5').value = "0"true立即清除您的时间间隔......

if (document.getElementById('amount5').value = "0") {

应该

if (document.getElementById('amount5').value == "0") {

在 javascript 中,您使用双等号 ( ==) 进行比较。

于 2012-05-28T13:26:30.870 回答
1

这个:

if(document.getElementById('amount5').value = "0"){

你应该使用==而不是=,否则你的条件总是真实的。话虽如此,那句话会立即杀死计时器。

于 2012-05-28T13:26:39.387 回答
0

另一种看待它的方法是使用setTimeout代替setIntervaland 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
于 2012-05-28T13:33:04.587 回答
0

您在设置区间变量范围时犯了错误。您应该将其定义为全局变量。

如果在“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>
于 2013-10-28T04:24:40.823 回答