簡體   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