有这台使用的间隔的功能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();
}
看起来你有点困惑超时和间隔之间的差异。 超时火只有一次; 间隔触发多次。 如果您使用的时间间隔,你可能只需要设置一次(你每次都设置它)。 如果您使用的是超时,你可能想每次设置(比如你正在做的)。
为了解决这个问题,你要么要切换到超时(可能是最简单的,只是一个查找/替换),或只设置间隔一次。
例如,这里是一个可以如何使用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
,我们不希望它继续每一次。
显然,你误会了setInterval
的setTimeout
。 setInterval
运行封闭的功能每 n
微秒,而setTimeout
后执行一次n
毫秒。
我想你想“嘀,直到5”,所以这里是一个示例 :
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();