2012-02-16 12 views
7

jQueryの場合、次の2つのスニペットの結果の違いは何ですか?何か?最初のアニメーションの完了時にコールバックとチェーン内の2番目のアイテムが両方とも実行されることを修正しましたか?私は他の上で1つを使用したい状況の種類(複数可)でJqueryチェーンとコールバック

$(selector).animate({ opacity: 1}, function() 
{ 
    $(this).animate({ opacity: 0.5 }); 
}); 

$(selector).animate({ opacity: 1 }).animate({ opacity: 0.5 }); 

?私がもっと洗練された何かをする必要があるか、別のセレクターに切り替える必要がある場合は、後者のみを使用しますか?

ありがとうございます。

+0

jQueryオブジェクトとして$(this)をキャストしてアニメーションを呼び出す必要がないので、最初の方が効率的だと思います。もっと複雑な作業が必要な場合は、おそらく2番目のオプションを使用したいだけです。編集:私はあなたが効率を探していない参照してください、私は両方の機能は同じだが、最初のケースでは、2番目の呼び出しが実行される前にアニメーションを返す必要があると思います。 – kand

+0

jQueryはアニメーションをキューに入れて管理するので、最初のアニメーションが終了するまで2番目のアニメーションは実行されません。これはアニメーションにのみ適用されます。 http://api.jquery.com/queue/の例を参照してください。 – Stefan

+0

@Stefan意味があります。あなたが言うことは、ここに記載されているものに適用されますか? [jQueryエフェクト](http://api.jquery.com/category/effects/) – technoTarek

答えて

9

これらは事実上同じですので、おそらく最初のものを使用してください。

コールバック(2番目のバージョン)は、自動的にキューに入れられない任意のコードを実行するためのものです。

これには、たとえば.css()のような他のjQueryメソッドが含まれています。コールバックに含まれていない場合は、アニメーションが完了するまでに長く実行されます。コールバックなし

// .animate() is automatically queued 
$(selector).animate({ opacity: 1 }).animate({ opacity: 0.5 }); 

// .css() is not automatically queued, so you'd need a callback 
$(selector).animate({ opacity: 1 }, function() { 
    $(this).css({ opacity: 0.5 }); 
}); 

...

// Animation starts ----v 
$(selector).animate({ opacity: 1 }).css({ opacity: 0.5 }); 
// ...but .css() runs immediately-------------^ 
// ...because it isn't automatically added to the queue. 
+1

良い説明は、jQueryのソースを見ていて、あなたは正しいです! – Loktar

0

唯一の違いは、タイミングである:最初のアニメーションが完了するまで第二の例のコールバックが実行されません。最初の例の連鎖アニメーションは、最初のアニメーションの開始直後に発生します。

+0

http://jsfiddle.net/loktar/MJmgP/はそうではないようです:? – Loktar

+0

@Rory当初私はタイミングが違うと思っていましたが、jQuery.comでこれを読んでいます: すべての要素は、jQueryによって1つ以上の関数キューを持つことができます。ほとんどのアプリケーションでは、1つのキュー(fx)のみが使用されます。キューは、プログラムの実行を停止することなく、要素に対して非同期的に一連のアクションを呼び出すことができます。たとえば、次のようになります。 '$( '#foo')。slideUp()。 このステートメントが実行されると、要素は即座にスライドアニメーションを開始しますが、フェーディング遷移はfxキューに配置され、スライド遷移が完了すると呼び出されます。 – technoTarek

+0

@technoTarekこれは非常に興味深いです、自分自身のような怠惰な人々のためのリンクがありますか? – jbabey

関連する問題