按设定的时间间隔将jQuery添加到数组中的元素

时间:2013-01-01 06:06:51

标签: javascript jquery javascript-events jquery-selectors coffeescript

我想动画以略微不同的时间清除项目列表,比如以20ms的间隔。 (当您清除消息时,请考虑Android 4.2警报屏幕。)

但是,我不能在间隔时间弄清楚如何addClass到数组中的不同元素。我试过这个,但这只是将jQuery应用到最后一个元素:

for item in App.itemsController.content
  jQuery('#box').delay(2000).queue (n) ->
    selector = '.' + item.objectId
    console.log selector
    $(selector).addClass('animated fadeOutRightBig')

我还试过setTimeout()setInterval()无济于事。 感谢。

1 个答案:

答案 0 :(得分:2)

您需要使用闭包来保持对item变量的引用。我不使用CoffeeScript,但在javascript中我会这样做。

var box = jQuery('#box');
for (var i in App.itemsController.content) {
    var item = App.itemsController.content[i];
    (function(item) {
        box.delay(2000).queue(function() {
            var selector = '.' + item.objectId;
            $(selector).addClass('animated fadeOutRightBig');
        });
    }(item));
}

也许这就是你在CoffeeScript中的表现?只是快速浏览一下语法。

for item in App.itemsController.content
  do (item) ->
     jQuery('#box').delay(2000).queue (n) ->
       selector = '.' + item.objectId
       console.log selector
       $(selector).addClass('animated fadeOutRightBig')

您还应该在循环外部引用#box元素,否则您的程序必须在每次迭代时搜索DOM。