如何使setInterval在一段时间后或经过多次操作后停止?

Ali*_*sso 36 javascript jquery loops

我使用这个答案中的代码创建了一个使用jQuery"更改单词"的循环: jQuery:查找单词并每隔几秒更改一次

一段时间后如何阻止它?在60秒之后或经过循环之后说?

你可以看到这里改变的词:http: //skolresurser.se/

(function(){

            // List your words here:
            var words = [
                'Lärare',
                'Rektor',
                'Studievägledare',
                'Lärare',
                'Skolsyster',
                'Lärare',
                'Skolpsykolog',
                'Administratör'
                ], i = 0;

            setInterval(function(){
                $('#dennaText').fadeOut(function(){
                    $(this).html(words[i=(i+1)%words.length]).fadeIn();
                });
               // 2 seconds
            }, 2000);

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

Mar*_*des 100

要在运行一定次数后停止它,只需在该间隔中添加一个计数器,然后当它达到该数字时清除它.

例如

var timesRun = 0;
var interval = setInterval(function(){
    timesRun += 1;
    if(timesRun === 60){
        clearInterval(interval);
    }
    //do whatever here..
}, 2000); 
Run Code Online (Sandbox Code Playgroud)

如果你想在经过一段时间后停止它(例如1分钟),你可以这样做:

var startTime = new Date().getTime();
var interval = setInterval(function(){
    if(new Date().getTime() - startTime > 60000){
        clearInterval(interval);
        return;
    }
    //do whatever here..
}, 2000);     
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,我现在明白了 - 如果循环中的位启动可能需要 > 2 秒的异步动画,明白了 - 是的,在这种情况下,最好像您建议的那样使用超时,但我想这并不是具体的问题所在询问。 (3认同)
  • 但是如果 `//dowhateverhere` 花费的时间超过 2 秒怎么办? (2认同)
  • 没关系,它是同步的——它会做函数中的东西,然后它会等待 2 秒。所以整个过程将花费超过运行次数 2 秒的时间。 (2认同)

小智 7

最简单的解决方案是

var intervalId =   setInterval(function() {
    $('#dennaText').fadeOut(function() {
        $(this).html(words[i = (i + 1) % words.length]).fadeIn();
    });
}, 2000); // run every 2 seconds

setTimeout(function(){
    clearInterval(intervalId);
},10000) // stop it after 10seconds
Run Code Online (Sandbox Code Playgroud)


Sha*_*oli 6

使用clearInterval清除的时间间隔。您需要传递从setInterval方法中获得的间隔 id 。

例如

var intervalId = setInterval(function(){
                    ....
                 }, 1000);
Run Code Online (Sandbox Code Playgroud)

要清除上述间隔使用

clearInterval(intervalId);
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式更改代码。

(function(){

    // List your words here:
    var words = [
        'Lärare',
        'Rektor',
        'Studievägledare',
        'Lärare',
        'Skolsyster',
        'Lärare',
        'Skolpsykolog',
        'Administratör'
        ], i = 0;

    var intervalId = setInterval(function(){
        $('#dennaText').fadeOut(function(){
            $(this).html(words[i=(i+1)%words.length]).fadeIn();
            if(i == words.length){//All the words are displayed clear interval
                 clearInterval(intervalId);
            }
        });
       // 2 seconds
    }, 2000);

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