如何在jQuery .each()的每次迭代之间添加暂停?

我抓取一个jQuery对象数组,然后通过.each()修改数组中的每个单独的jQuery。

在这种情况下,我更新了类名来触发-webkit-transition-property来利用css转换。

我希望在每个css过渡开始之前暂停一下。 我正在使用以下内容,但每次更新之间没有任何延迟。 相反,他们似乎都在同时更新。

function positionCards() { $cards = $('#gameboard .card'); $cards.each(function() { setTimeout( function(){ addPositioningClass($(this)); }, 500 ) }); } function addPositioningClasses($card){ $card .addClass('position') } 

我希望setTimeout会解决这个问题,但似乎并没有工作。 有没有办法在每个对象的每个CLASS名称更新之前完成暂停?

我添加了这个作为一个评论,但现在,我已经正确地阅读并回答了我自己的问题这可能会工作:

 function positionCards() { $cards = $('#gameboard .card'); var time = 500; $cards.each(function() { setTimeout( function(){ addPositioningClass($(this)); }, time) time += 500; }); } 

对不起挖掘一个旧的线程(和我的英语不好),但这个提示可能是有用的其他类似的情况:

 $cards.each(function(index) { $(this).delay(500*index).addClass('position'); }); 

如果你制定一个方法,每500毫秒就应该这样做。 下面的代码应该工作。

 var __OBJECTS = []; $('#gameboard .card').each(function() { __OBJECTS.push($(this)); }); addPositioningClasses(); function addPositioningClasses() { var $card = __OBJECTS.pop(); $card.addClass('position'); if (__OBJECTS.length) { setTimeout(addPositioningClasses, 500) } } 

testing小提琴: http : //jsfiddle.net/jomanlk/haGfU/

那么.delay()怎么样?

要么

 function addPositioningClasses($card){ setTimeout(function() { $card.addClass('position')}, 1000); } 

如果您只针对Safari / iOS,取决于您控制animation序列的确切时间的重要性,您应该避免使用任何涉及JS超时的解决scheme。 不能保证animation会在超时延迟的同时完成,特别是在慢速处理器或后台有很多东西正在进行的机器上。 Webkit的更新版本(包括移动Safari)允许通过@-webkit-keyframes进行定时animation序列。 Webkit.org有一个很好的介绍 。 这实际上很容易实现。

试试这个:

 function positionCards() { $('#gameboard .card').each(function() { $(this).delay(500).addClass('position'); }); } 

我会诚实的…在某些情况下,我曾经有过$(this).delay()的错误行为,而且在其他情况下完美无瑕。 但是,这通常与jQueryanimation调用一起使用,而不是DOM属性操作。

请注意,.delay()的function与setTimeout的function不同。 有关更多信息,请参阅jQuery .delay()文档 。

据我所知,$()。每个都执行程序,所以下一次调用只能在前一个完成之后才开始。

看看这个,对我来说效果不错! 🙂

 jQuery('.optiresultsul li').each(function(index) { jQuery(this).delay(500*index).animate({ opacity: 1 }, 500,function(){ jQuery(this).addClass('bgchecked'); }); }); 

此代码将添加将初始延迟设置为50ms。 然后通过“.row”类的每个循环它将会增加一个额外的200ms延迟。 这将为每一行创build一个很好的延迟显示效果。

 $( document ).ready(function() { // set inital delay var dtotal = 50; $(".row").each(function() { //add delay to function $(this).delay(dtotal).show(); //add 200ms to delay for each loop dtotal = dtotal + 200; }); });