[英]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.