使用setTimeout或延迟

时间:2015-08-05 15:45:14

标签: javascript jquery

我有一个div的列表,我希望以延迟的方式迭代应用CSS过滤器。

我目前已经尝试过这个

$(this).children().each(function() {
    $(this).delay(5000).css("-webkit-filter", "brightness(2)");
});

这个

$i = 0;
 $(this).children().each(function() {
     setTimeout(function() {
        $(this).css("-webkit-filter", "brightness(2)");
     }, $i * 500);
     $i++ 
});

第一个没有任何延迟。第二个将延迟应用于组中的最后一个(.each())

小提琴:http://jsfiddle.net/raaexs2m/

1 个答案:

答案 0 :(得分:0)

你的第二种方法的问题是,匿名setTimeout函数中的“this”不再是你所期望的“this”。

我使用的解决方案: 只需在调用setTimout之前重新分配“this”:

var mythis = this;

mythis现在可以在setTimeout的匿名函数中访问。

$i = 0;
 $(this).children().each(function() {
     var mythis = this; // << introducing mythis
     setTimeout(function() {
        $(mythis).css("-webkit-filter", "brightness(2)"); // << using mythis
     }, $i * 500);
     $i++ 
});