Dan*_*llo 143
您可以clearInterval()在x调用后调用:
var x = 0;
var intervalID = setInterval(function () {
// Your logic here
if (++x === 5) {
window.clearInterval(intervalID);
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
为避免全局变量,上述改进将是:
function setIntervalX(callback, delay, repetitions) {
var x = 0;
var intervalID = window.setInterval(function () {
callback();
if (++x === repetitions) {
window.clearInterval(intervalID);
}
}, delay);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以setInvervalX()按如下方式调用新函数:
// This will be repeated 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);
Run Code Online (Sandbox Code Playgroud)
NDa*_*vis 12
我个人更喜欢使用setTimeout()spaced out 来达到同样的效果
// Set a function to run every "interval" seconds a total of "x" times
var x = 10;
var interval = 1000;
for (var i = 0; i < x; i++) {
setTimeout(function () {
// Do Something
}, i * interval)
}
Run Code Online (Sandbox Code Playgroud)
无需清理clearInterval()
您可以将其封闭起来以避免变量泄漏,而且它看起来非常干净:)
// Definition
function setIntervalLimited(callback, interval, x) {
for (var i = 0; i < x; i++) {
setTimeout(callback, i * interval);
}
}
// Usage
setIntervalLimited(function() {
console.log('hit'); // => hit...hit...etc (every second, stops after 10)
}, 1000, 10)
Run Code Online (Sandbox Code Playgroud)
您可以设置调用的超时时间clearInterval。这应该有效:
function setTimedInterval(callback, delay, timeout){
var id=window.setInterval(callback, delay);
window.setTimeout(function(){
window.clearInterval(id);
}, timeout);
}
Run Code Online (Sandbox Code Playgroud)