如何将$(this)引用传递给回调函数?

时间:2010-07-19 07:37:06

标签: javascript jquery animation

我的网页上有以下动画:

     $(".anim-item").not(this).animate({
        opacity: 0,
     }, { queue: true, duration: 1000 } , function() {
        // Animation complete.
     });

     $(this).animate({
        left: 200,
     }, { queue: true, duration: 1000 } , function() {
        // Animation complete.
     });

目前两个动画都在同时运行。我希望第二个动画在第一个动画之后运行。我尝试将第二个放在回调函数中,但找不到让$(this)引用工作的方法。知道如何让这个工作吗?

提前致谢。

6 个答案:

答案 0 :(得分:3)

您的功能错误,如果您要声明选项,则回调会进入选项对象:

$(".anim-item").animate({
   opacity: 1,
}, {duration: 1000, queue: true, complete: function() {
   $(this).animate({
      left: 200,
   }, { queue: true, duration: 1000, complete: function() {
      // Animation complete.
   }});
}});

另外,不要创建一个包含该项的全局变量,这只是要求麻烦,尤其是jquery会在这个实例中为你维护它,如果你需要为链接中的对象声明一个新变量,通常你做得不对;)

答案 1 :(得分:1)

将其保存为其他名称,如下所示:

 var myThis = this;
 $(".anim-item").not(this).animate({
    opacity: 0,
 }, { queue: true, duration: 1000 } , function() {
    $(myThis).animate({
       left: 200,
    }, { queue: true, duration: 1000 } , function() {
       // Animation complete.
    });
 });

关闭内部函数将确保它可见。

答案 2 :(得分:1)

两种方式:

    在调用this 之前,在局部变量中
  • 缓存.animate()
  • 使用.proxy()this引用传递给.animate()

示例1:

var func = function(){
   var self = this;

   $(".anim-item").not(this).animate({
     opacity: 0,
     }, { queue: true, duration: 1000 } , function() {
        self.animate({});
     });
};

示例2:

var func = function(){
   $.proxy($(".anim-item").not(this).animate({
   }), this);
};

答案 3 :(得分:0)

通过

为此创建别名
var _this = this;

如果编写jQuery查询$('.abc')并使用clickhover等函数,this将始终引用jQuery正在处理的当前DOM节点。

答案 4 :(得分:0)

将其存储在本地变量中。

var _this = this;

$(".anim-item").not(this).animate({
        opacity: 0,
    }, { queue: true, duration: 1000 } , function() {
        // Animation complete. Next animation
        $(_this).animate({
            left: 200,
        }, { queue: true, duration: 1000 } , function() {
            // Animation complete.
        });
    }
);

答案 5 :(得分:0)

在jQuery中,回调函数this始终设置为函数适用的DOM元素。

如果您希望在第一个回调函数中访问this,则必须在制作动画之前创建对它的引用:

 var self = this;
 $(".anim-item").not(this).animate({
    opacity: 0,
 }, { queue: true, duration: 1000 } , function() {
    $(self).animate({
        left: 200,
     }, { queue: true, duration: 1000 } , function() {
        // Animation complete.
     });
 });