setInterval与循环时间

bin*_*680 26 javascript setinterval

setInterval(function(){}, 200)
Run Code Online (Sandbox Code Playgroud)

这个代码每200毫秒运行一次这个函数,如果我只想运行10次这个函数怎么办呢.

感谢帮助.

kar*_*m79 73

使用一个计数器,每次执行回调时递增,当它达到所需的执行次数时,clearInterval()用来杀死计时器:

var counter = 0;
var i = setInterval(function(){
    // do your thing

    counter++;
    if(counter === 10) {
        clearInterval(i);
    }
}, 200);
Run Code Online (Sandbox Code Playgroud)


Esa*_*ija 7

(function(){
var i = 10;
    (function k(){

        // your code here            

        if( --i ) {
        setTimeout( k, 200 );
        }

    })()
})()
Run Code Online (Sandbox Code Playgroud)


sha*_*run 5

如果你想让它运行 10 次并且它应该运行的时间是每 200 毫秒那么 200X10 = 2000

var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2000);
Run Code Online (Sandbox Code Playgroud)

但它只运行了 9 次,所以我们必须添加更多 200 毫秒

var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2200);
Run Code Online (Sandbox Code Playgroud)

或者你可以在 setInterval 之前运行它

yourfunction();
var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2000);
Run Code Online (Sandbox Code Playgroud)

  • 我知道它不安全,但是,问题是代码背后的想法,而不是它是如何完成的,抱歉我的英语不好 (2认同)
  • 我建议不要太认真地对待上面令人震惊的评论,但通常传递一个函数是首选。毫无价值的是,通过字符串传递是*不同的行为*(即它在全局范围内查找函数)以及旧浏览器中支持的所有内容。 (2认同)
  • 我喜欢这个解决方案。您应该为清除提供的唯一内容是执行时间的变量,并将乘法作为第二个参数传递给“setTimeout()”。 (2认同)