2011-12-19 10 views
0

は、私はjqueryの1.5と互換性のある機能の中に、この機能メイクjqueryのスクリプト機能

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

を作るために必要がある場合との互換性1.5.2。

私は試してみましたが、うまく動作しません。誰でも私を助けてくれる?

@編集:ここで設定しましたhttp://jsfiddle.net/u4hWf/ご覧のように、jquery 1.5.2ではjquery 1.6.xではなく、奇妙な視覚的なことが起こります。誰かが一見すると素晴らしいと感じたら、

+0

私はよく分かりません。 'done'関数が' fadeOut'と 'fadeIn'の両方が発生したときに実行するようにしますか? – lonesomeday

+0

さて、私はjqueryの専門家ではありませんが、これはjquery 1.6で動作するコードの平和です。私はそれが何をしているかを正確に伝えることはできません(私に教えてください)。しかし、これはjquery 1.5(私は成功しなかった)に変換される必要があります。 – Nealv

+0

私が言うことができる限り、 '$ .when'呼び出しは1.6であっても、それが完了しても何も起こらないので、全く役に立たない。 – lonesomeday

答えて

2

あなたはDeferredスタイルのコード。 jQueryのバージョンをアップグレードすることを強くお勧めします。

このコードは、コードの2つの非同期ビットが完了すると、1ビットのコードを実行します。彼らは与えられた同じ時間を持っていることを考えると、あなたは単に時間の分だけコードを遅らせることができます:

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

これは、迅速かつ(やや)ハックアプローチです。もう1つは、正しい数の関数が完了したときに少しのコードしか実行しない関数を実行することです。

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行動を複製し、さらに拡張可能です。

+0

これは完全に動作することが確認できます。ありがとう – Nealv