在循环结束时添加暂停

时间:2015-06-17 14:26:14

标签: javascript jquery

下面的代码运行正常,直到我尝试添加暂停。基本上,它会循环并且看起来很正常,但经过几次之后,它会逐渐赶上并导致许多奇怪的结果。我很好奇是否有更好的方法来实现我想要的目标。

var popups = $('.animate');
var i = 0;
var pT = 2000;

function animatePopup() {
    if (i >= popups.length){
        i = 0;
    }
    popups.eq(i).addClass("show")
       .delay(2000)
       .queue(function() {
           $(this).removeClass("show");
           $(this).dequeue();
           if (i == popups.length) {
                setInterval(animatePopup, pT);
           } else {
                animatePopup();
           }
       });
    i++;
}
animatePopup();

1 个答案:

答案 0 :(得分:2)

使用setTimeout代替setInterval

setInterval以间隔运行代码/函数,它们之间的超时长度,但 KEEPS RUNNING THEM 。另一方面,setTimeout在指定时间结束时运行一次

这是一个片段,如果您将setTimeout更改回setInterval,您会发现它也很疯狂



function recurrentDelayedFunction() {
  
    $('#out').append('ran<br>');
  
    setTimeout(recurrentDelayedFunction, 2000);
}

recurrentDelayedFunction();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id=out></div>
&#13;
&#13;
&#13;