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