我必须以同步方式为元素设置动画(即等到动画(本例中为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...
}
这个问题确实让我感到困惑,因为我喜欢干净的代码而且我不喜欢这种简单但不干净的解决方案。
答案 0 :(得分:2)
创建一个调解变量以引用原始对象:
doSomething: function () {
var that = this;
$('.someElement').fadeIn(function() {
// use "that" here
});
}
答案 1 :(得分:0)
如果doSomethingElse()
是另一个动画,则可以保持原始上下文链接和排队。