0

我需要做这个功能

$.when(
    self.image.fadeOut(self.options.animationSpeed),
    self.aniImg.eq(0).fadeIn(self.options.animationSpeed)
).done(function () {
    self.finishAnimating(data);
});

成一个与 jquery 1.5 兼容的函数。

我一直在尝试,但无法让它工作。谁能帮帮我?

@Edit:我在这里做了一个设置http://jsfiddle.net/u4hWf/。如您所见,使用 jquery 1.5.2 会发生奇怪的视觉效果,而 jquery 1.6.x 不会发生这种情况

4

1 回答 1

2

你不会让任何东西像 Def​​erred 风格的代码那样漂亮。我强烈建议您考虑升级 jQuery 的版本。

一旦两个异步代码位完成,此代码只运行一个代码位。鉴于它们具有相同的持续时间,您可以简单地将代码延迟该时间:

self.image.fadeOut(self.options.animationSpeed);
self.aniImg.eq(0).fadeIn(self.options.animationSpeed);
setTimeout(function() {
    self.finishAnimating(data);
}, self.options.animationSpeed);

这是快速且(略)骇人听闻的方法。另一种方法是运行一个仅在完成正确数量的函数时才执行一些代码的函数。

var ticks = 0;

function tick() {
    if (++ticks === 2) { // number of animations
        self.finishAnimating(data);
    }
}

self.image.fadeOut(self.options.animationSpeed, tick);
self.aniImg.eq(0).fadeIn(self.options.animationSpeed, tick);

这更冗长,也不是很漂亮,但它更精确地复制了$.when行为,并且更具可扩展性。

于 2011-12-20T13:55:29.057 回答