0

私はこれが可能であると私に信じさせるチェーンの.filter()と呼び出しを見てきました。.end()そこで、チェーンに追加できる独自の関数を作成しましたrawr()

$('#object').fadeIn().rawr().delay(1000).fadeOut();

rawr()に次に何が起こるかを確認し、それが何であるかに応じて、実行を続行するか、チェーンを終了して次のコード行に移動できるようにします。これはどのように行われますか?

4

3 に答える 3

1

JavaScriptソース自体を解析せずに、呼び出された関数のチェーン内の次のjQuery関数を直接取得することはできません。

あなたのコメントを考えると:

アニメだけを扱ってはいけないと思っていました。

このメソッドを使用して、関数をキューqueueに格納する必要があります。fxカスタム関数が実行されると、fxキューはjQueryチェーン内のすべてのアニメーションをキューに入れます。

カスタム関数内で、キューにアクセスして、fxキューに入れられているものを確認できます。clearQueueキューをデキューする前に、を呼び出してキューに入れられた関数を削除することもできfxます。

fx現在実行中の関数が終了したことを示すまで、キューは他のキューに入れられた関数に対して続行されないため、カスタムのキューに入れられた関数をデキューする必要があります。

とはいえ、後で単純にクリアされるアニメーションをチェーンしようとするのではなく、チェーンを解除して条件付きでメソッドを実行する必要があるようです。

于 2012-08-22T19:04:46.363 に答える
0

条件付きでチェーンを終了することは可能です。こちらをご覧ください。

$.fn.if = function(flag) {
    return (flag) ? this.pushStack( this ) : this.pushStack( [] );
};

ただし、チェーン内の現在のアイテムを先読みすることはできません。

于 2012-08-22T18:56:20.427 に答える
0

これはどのように機能するかではありませ.filter.endドキュメントから直接:

これが発生すると、オブジェクト内で維持されているスタックに新しい要素のセットがプッシュされたかのようになります。連続する各フィルタリングメソッドは、新しい要素セットをスタックにプッシュします。古い要素セットが必要な場合は、end()を使用してセットをスタックからポップバックできます。

于 2012-08-22T18:56:44.010 に答える