有一个函数使用setInterval()
设置间隔,但即使在调用clearInterval()
之后,我也可以在控制台中看到else
条件仍在运行。如何正确清除该间隔?
function increase(old, step, neu) {
var i = 0;
var delay2;
function countUp() {
if (i < 5) {
old += step;
// console.log("increase")
$("#total-price-value").text(old + " dollors");
$("#total-price-value").digits();
i++;
delay2 = setInterval(countUp, 80);
} else {
clearInterval(delay2);
console.log(delay2);
}
}
countUp();
}
答案 0 :(得分:10)
看起来你对超时和间隔之间的差异感到有点困惑。超时只发射一次;间隔火多次。如果你正在使用一个间隔,你可能只想设置一次(你每次都设置它)。如果您正在使用超时,您可能希望每次都设置它(就像您正在做的那样)。
为了解决问题,你要么想要切换到超时(可能是最简单的;只是搜索/替换),要么只设置一次间隔。
例如,以下是如何使用setTimeout
计算最多五个:
var count = 0;
function timeoutFired() {
count++;
if(count < 5) {
setTimeout(timeoutFired, 1000);
}
}
setTimeout(timeoutFired, 1000);
使用超时,我们无需清除以阻止计数;只是不设置超时将阻止它再次运行。
以下是如何使用setInterval
:
var count = 0;
function intervalFired() {
count++;
if(count >= 5) {
clearInterval(interval);
}
}
var interval = setInterval(intervalFired, 1000);
如果您希望使用间隔定期运行某些代码,则必须调用clearInterval
。请注意,每次我们不希望它继续时,我们只会调用setInterval
一次,而不是setTimeout
。
答案 1 :(得分:2)
显然,setInterval
错误setTimeout
。 setInterval
每隔 n
毫秒运行封闭的函数,setTimeout
仅在n
毫秒后执行一次。
我想你想要直到5&#34;所以here's a sample:
function increase(old, step, neu) {
var i = 0;
interval = setInterval(function() {
if (i < 5) {
//do something at this "tick"
console.log(i);
i++;
} else {
//else, stop
clearInterval(interval);
}
},80);
}
increase();