2

一部の jQuery アニメーション メソッドは、 として記述された引数を取りますcomplete。これは、アニメーションが終了すると呼び出される関数です。例えば:

$(obj).slideUp(duration, easing, complete());

completeこれは、以下のアニメーションの後に呼び出すのとどう違うのですか?

$(obj).slideUp(duration, easing)
.complete();
4

2 に答える 2

3

違いは、2 番目のケースでは がアニメーションの開始complete直後に呼び出され、コールバックとして渡すとアニメーションの終了時にトリガーされることです。

アニメーションは実際には非同期である可能性があるため、アニメーションを起動した後も JavaScript の実行が継続されます。そのため、直後に呼び出しても、アニメーションの完了後に呼び出しが実行されることは保証されず、アニメーションが開始された後にのみ実行complete()ます$(obj).slideUp(duration, easing);complete

また

$(obj).slideUp(duration, easing, complete());

本当にあるべき

$(obj).slideUp(duration, easing, complete);

実際、最初のケースでは、アニメーションが開始するcompleteでも関数を呼び出しています!

最後に、2 番目の例が間違っているように見えることに注意してください。

$(obj).slideUp(duration, easing)
.complete();

これは への呼び出しで呼び出しをチェーンしてslideUpcompleteますが、jquery オブジェクトにはcompleteメソッドがありません。おそらく次のようになります。

$(obj).slideUp(duration, easing);
complete();

実際には、質問の以前の編集にあったように。

于 2013-10-28T12:52:42.930 に答える
3
$(obj).slideUp(duration, easing, complete());

これは間違っています。これは、呼び出さcomplete れる前に slideUp呼び出しています。

$(obj).slideUp(duration, easing);
complete();

これが実行slideUpされ、直後に が呼び出されますcomplete。が呼び出されるまでに、アニメーションはまだ終了していない可能性がありますslideUp(実際、確実に終了することはありませんcomplete) 。

$(obj).slideUp(duration, easing, function () {
    alert('Complete!');
});

// or

$(obj).slideUp(duration, easing, complete);
                                     // ^^ look ma, no () !

、これはあなたがそれを使用することになっている方法です。"完了!" slideUpアニメーションが終了した後にのみ警告されます。

于 2013-10-28T12:53:23.217 に答える