0

実際、私が使用するとき

setTimeout(a(),60);
setTimeout(a(),120);
setTimeout(a(),180);
setTimeout(a(),240);

関数の呼び出しの間には60msのギャップがあるはずです。

ただし、特にページの読み込み中または要素のアニメーション化中に発生する場合はそうではありません。実際、ブラウザが「やらなければならない」場合、ギャップはさらに2倍長くなります。場合によっては、簡単に表示できます。

問題のポイントは、JavaScriptでイベントや関数を時間内に同期する他の方法はありますか?

4

3 に答える 3

3

これを試して:

setTimeout(a,60);
setTimeout(a,120);
setTimeout(a,180);
setTimeout(a,240);

関数には s がないことに注意してください()

于 2012-12-31T01:04:24.113 に答える
3

のタイミングはsetTimeout(a(),60)、簡単に言えば に変換されI will run this function no earlier than 60ms, but if I get busy it could be later than thatます。

したがって、実行がいつsetTimeout行われるかは約束されず、ミリ秒単位で指定された時間の後に実行されることのみが保証されます。

したがって、あなたの質問に答えるには、実行時間を保証するsetTimeout方法はありませんが、DOM がロードされた後にスクリプトをロードして、JavaScript が他のものをロードするのにビジー状態にならないようにすることができます。$(document).ready()jQueryでは、その目的のために関数を使用できます。

JavaScript でのタイミングの詳細については、John Resig によるこの記事を参照してください: http://ejohn.org/blog/how-javascript-timers-work/

于 2012-12-31T01:14:43.457 に答える
2

特定のケースでは、setInterval()が機能する可能性があります。

var count = 0, interval = setInterval(function() {
    count += 1;
    if (count > 4) {
        clearInterval(interval);
    } else {
        a();
    }
}, 60);

jQuery にはアニメーション機能が組み込まれていることに注意してください。この機能は、単にアニメーションを時間の関数として扱い、クロックを頻繁にチェックするという、別のより優れたアプローチを使用するため、予期しない遅延が発生すると、アニメーションの滑らかさが少し損なわれます。

于 2012-12-31T01:23:25.157 に答える