9

jQueryの効果に関するこの質問に答えて、私はへのcallback引数を使用することを考えました.fadeIn( 500, my_function )

原則として、これは実行可能なアイデアですが、コールバックが再帰を許可されている場合、私には手がかりがありません(また、jQueryドキュメント:()もありません。

function keep_animating(){
   $("#id").fadeIn(500).fadeOut(500, keep_animating );
}
4

3 に答える 3

3

デバッガーブレークポイントを追加して、スタックサイズが増加するかどうかをテストできます。:)

ただし、アニメーション/フェードはsetTimeout / setIntervalを使用するため、呼び出しの深さは増加しない、つまりスタックオーバーフローが発生しにくいと確信しています。

于 2011-02-18T15:10:22.247 に答える
1

私は時間をかけて「知っている人」に尋ねました...明示的な再帰がないため、スタックオーバーフローはありません:fadeInfadeOut...メソッドはすべてエフェクトキューにエントリを作成するだけです。これは、keep_animating関数が同じコンテキスト内から実行されないことを意味します。

デイブメトビンの礼儀:

あなたが「再帰」と表現しているのは、実際には再帰ではありません。jQueryの視覚効果はsetTimeoutタイマーで実行されるため、再帰の場合のようにコールバック関数はすぐには実行されません。代わりに、コールバックは、アニメーションがいくつかの「ステップ」で完了した後に実行され、それぞれがsetTimeoutによってトリガーされます。

于 2011-02-21T08:47:37.777 に答える
0

ソリューションは再帰し、最終的にはスタックを吹き飛ばしますが、ブラウザによっては、それが完了するまでかなりの時間がかかります。簡単なデモの場合はこれで問題ありませんが、本番環境に対応したコードの場合は、次のような非再帰的なアプローチを採用する必要があります。

function pulse(){
   $("#id").fadeIn(500).fadeOut(500);
}
setInterval(pulse, 1000);

これをスキンする方法はたくさんありますが、そこに到達するはずです。

于 2011-02-18T16:27:20.317 に答える