0

我必须以同步方式为元素设置动画(即等到动画(本示例中为 fadeIn() )完成,这样我才能正确地继续)。

据我所知,我有三个选择:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do something else here...
    });
}

另一种方法(使用 $.proxy() 更改上下文):

doSomething: function () {
    $('.someElement').fadeIn($.proxy(function () {
        this.doSomethingElse();
    }, this));
},

doSomethingElse: function () {
    // ...
}

但是,由于使用 $.proxy() 有点“混合”上下文,我真的不喜欢这个(因为我只是不知道它什么时候会回来咬我的屁股),我有时会使用这个方法:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        doSomethingElse();
    });

    function doSomethingElse () {
        // ...
    }
}

现在我想知道,有没有更好的方法?更简单,更优雅的东西。喜欢:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do this in an async way...
    });

    // simply do something else here...
}

这个问题确实困扰着我,因为我喜欢干净的代码,但我不喜欢这种简单但不干净的解决方案。

4

2 回答 2

2

创建一个中介变量来引用您的原始对象:

doSomething: function () {
    var that = this;
    $('.someElement').fadeIn(function() {
       // use "that" here
    });
}
于 2012-06-27T06:53:26.313 回答
0

如果doSomethingElse()是另一个动画,您可以将它们链接并排队以维护原始上下文。

于 2012-06-27T07:31:37.263 回答