jQueryの効果に関するこの質問に答えて、私はへのcallback
引数を使用することを考えました.fadeIn( 500, my_function )
。
原則として、これは実行可能なアイデアですが、コールバックが再帰を許可されている場合、私には手がかりがありません(また、jQueryドキュメント:()もありません。
function keep_animating(){
$("#id").fadeIn(500).fadeOut(500, keep_animating );
}
jQueryの効果に関するこの質問に答えて、私はへのcallback
引数を使用することを考えました.fadeIn( 500, my_function )
。
原則として、これは実行可能なアイデアですが、コールバックが再帰を許可されている場合、私には手がかりがありません(また、jQueryドキュメント:()もありません。
function keep_animating(){
$("#id").fadeIn(500).fadeOut(500, keep_animating );
}
デバッガーブレークポイントを追加して、スタックサイズが増加するかどうかをテストできます。:)
ただし、アニメーション/フェードはsetTimeout / setIntervalを使用するため、呼び出しの深さは増加しない、つまりスタックオーバーフローが発生しにくいと確信しています。
私は時間をかけて「知っている人」に尋ねました...明示的な再帰がないため、スタックオーバーフローはありません:fadeIn
、fadeOut
...メソッドはすべてエフェクトキューにエントリを作成するだけです。これは、keep_animating
関数が同じコンテキスト内から実行されないことを意味します。
デイブメトビンの礼儀:
あなたが「再帰」と表現しているのは、実際には再帰ではありません。jQueryの視覚効果はsetTimeoutタイマーで実行されるため、再帰の場合のようにコールバック関数はすぐには実行されません。代わりに、コールバックは、アニメーションがいくつかの「ステップ」で完了した後に実行され、それぞれがsetTimeoutによってトリガーされます。
ソリューションは再帰し、最終的にはスタックを吹き飛ばしますが、ブラウザによっては、それが完了するまでかなりの時間がかかります。簡単なデモの場合はこれで問題ありませんが、本番環境に対応したコードの場合は、次のような非再帰的なアプローチを採用する必要があります。
function pulse(){
$("#id").fadeIn(500).fadeOut(500);
}
setInterval(pulse, 1000);
これをスキンする方法はたくさんありますが、そこに到達するはずです。