9

私がそうする場合、何か違いはありますか?

$queue.queue(function(next){
   //...
   next();
}).queue(function(next){
   //...
   next();
});

$queue.queue(function(){
   //...
   $(this).dequeue();
}).queue(function(){
   //...
   $(this).dequeue();
});

彼らは同じことをしますか?

違いは何ですか?どちらを使用すればよいですか?

jQueryのドキュメントで実際には言及されていないのは奇妙なこと.next()です。彼らはいつも使用すると言っています.dequeue()が、私の職場では人々が.next()関数を使用しているので、これはかなり混乱しています。

4

2 に答える 2

7

私が知っていることですが、違いはありません。なぜ一方が他方よりも好ましいのか、それが私を混乱させるので両方が言及されているのかはわかりません。

http://code.jquery.com/jquery-1.9.1.jsを見ると、次のことがわかります。

1915 next = function() {
         jQuery.dequeue( elem, type );
     };

...jQuery.dequeueメソッド内。これは少し後で(1936行目で)と呼ばれfn.call(elem, next, hooks)ます。これがコールバックnextの最初のパラメーターであり、その時点であることがわかります。queuefnqueue

先を見据えて、

1983 dequeue: function( type ) {
         return this.each(function() {
             jQuery.dequeue( this, type );
         });
     },

これはで定義されてjQuery.fnいるので、はで呼び出される関数$(this).dequeueです。ただし、これはまったく同じことを行います。唯一の違いは、デキューされる要素です。そのfn.dequeue中でコレクションをループしますが、それはの1つの要素にすぎません$(this)

振り返ってみると、次のことelemがわかります。

1908 dequeue: function( elem, type ) {

...ちょっと待ってください..それはthis(から呼び出されたとき$(this).dequeue)です!したがって、それらがまったく同じことをしていることがわかります。 $("some other collection").dequeueただし、動作は異なります。

電話をかけるnext()と追加の電話が節約.eachされるので、もっと速くなると思います。

ちなみに、nextパラメータの名前は好きな名前に変更できるので、コールバックで呼び出す必要はありません。

編集:私の著名な同僚@FabrícioMattéとのミニディスカッションによるnext()$(this).dequeue()、特に標準fxキューを使用していない場合、との間で機能に違いが生じる可能性があります。next関数が作成されると、すでに取得した型で呼び出すように設定されますが、$.dequeue引数として型を取ります。誰かが標準のエフェクトキュー以外のものを実際に使用しているのを見たことがありませんが、これはおそらくさらに固執する動機です。queue$.fn.dequeuenext()

于 2013-02-27T01:06:59.887 に答える
4

jQuery.fn.dequeueと関数は両方とも、のnext単なるラッパーでjQuery.dequeueあり、両方の例で同じ引数のセットを渡します。


(jQuery 1.9.1の時点で最新)

次の関数パラメータの場合:typeはキューを示すオプションのパラメータであり、デフォルトfxはjQueryのデフォルトのアニメーションキューです。elementDOM要素参照です。

$.fn.dequeue

dequeue: function( type ) {
    return this.each(function() {
        jQuery.dequeue( this, type );
    });
}

$().dequeue$.dequeuejQueryオブジェクト内に含まれる各要素を呼び出すだけです。

ユースケースでは、要素が最初に。によって参照されるように1回$(this).dequeue()呼び出します。$.dequeuethis

同様に、キューがデキューされている現在の要素である、nextへの単一の要素参照を渡します。$.dequeue

next = function() {
    jQuery.dequeue( elem, type );
};

言い換えれば、これらは本質的に同じです。next反復ラッパーがないため、少し直接的です。したがって、next()よりも数マイクロ秒高速である必要があります$.fn.dequeue()

.dequeue()主な違いは、複数の要素を呼び出すことができnext()、キューがデキューされている要素に直接関連付けられている間、各要素をデキューすることです。

コールバック内にあるユースケースの場合$(this).dequeue()、これは関係ありません。$.fn.dequeue1つ以上の要素のデキューを開始するときに役立ちます。$(this).dequeue()と同等の結果がnext()得られますが、この場合、後者はマイクロ秒のゲインを提供します。


コメントの@ExplosionPillsで指摘されているように、fxキュー以外を処理する場合は、さらにもう1つの特徴があります。

$(this).dequeue()引数がないtypeと、デフォルトのキュー()がデキューされるfxため、非fxキューでは名前をパラメーターとしてに渡す必要がありますが.dequeue().next()作成スコープのチェーンを検索し、関数オブジェクトを作成しtypeたスコープ内を自動的に取得します。$.dequeue()next

したがって、非キューを使用する場合は、キュー名をにfx渡す必要がありますが、コールバックが属するキューでは常にデキューされます。$().dequeue(queueIdentifier).next()

于 2013-02-27T01:04:06.153 に答える