如何将变量传递给setTimeout?

时间:2015-03-08 16:26:05

标签: javascript jquery

这是我的出席:

  $('md-card').each(function(index){
    setTimeout(function(){
      $(this).addClass('hietim');
    },500*index);
  });

目标是为md-card元素设置分层时间。

它没有用,因为$(this)setTimeout(function(){})内没有任何意义。我也尝试过:

  $('md-card').each(function(index){
    var e = $(this)
    setTimeout(function(e){
      e.addClass('hietim');
    },500*index);
  });

它会弹出一个jquery错误。还尝试过:

  $('md-card').each(function(index){
    $(this).delay(500*index).addClass('hietim');
  });

它失败了,因为delay()似乎无法与addClass一起使用。

3 个答案:

答案 0 :(得分:3)

只要您不将变量传递给函数,第二个选项就应该有效。然后它会传递一个对e的引用,创建一个闭包,当setTimeout完成时,该闭包将允许函数使用该变量,而不管该作用域是否继续存在。

$('md-card').each(function(index){
var e = $(this)
setTimeout(function(){  // Remove the e here
  e.addClass('hietim');
},500*index);

});

答案 1 :(得分:0)

即使你也可以尝试这种方式

$('md-card').each(function(index){
setTimeout(function(thisObj){
  thisObj.addClass('hietim');
},500*index,$(this));
});

在此处查看setTimeout功能详细信息。

答案 2 :(得分:-1)

为此,我使用了元素的偏移量(从左上角开始)。

您可以在jQuery plugin上看到github的源代码。

$('md-card').each(function(index){
    var element = $(this);
    var elementOffset = element.position();
    var calculatedOffset = elementOffset.left * 0.8 + elementOffset.top;
    var timeOut = parseFloat(calculatedOffset / 15).toFixed(2);
    setTimeout(function(){
        element.addClass('hietim');
    }, timeOut*index);
});