Javascript - 告诉 setInterval 只触发 x 次?

新手上路,请多包涵

是否可以限制 setInterval 在 javascript 中触发的次数?

原文由 Probocop 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

您可以在 x 调用后调用 clearInterval()

 var x = 0;
var intervalID = setInterval(function () {

   // Your logic here

   if (++x === 5) {
       window.clearInterval(intervalID);
   }
}, 1000);

为了避免全局变量,上述的改进是:

 function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

       callback();

       if (++x === repetitions) {
           window.clearInterval(intervalID);
       }
    }, delay);
}

然后你可以调用新的 setInvervalX() 函数如下:

 // This will be repeated 5 times with 1 second intervals:
setIntervalX(function () {
    // Your logic here
}, 1000, 5);

原文由 Daniel Vassallo 发布,翻译遵循 CC BY-SA 4.0 许可协议

我个人比较喜欢用 setTimeout() 隔开来达到同样的效果

// 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)
}

不需要清理 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)

原文由 NDavis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题