5

私が取り組んでいる無限スクロール スタイルのページがあります (無限スクロールの例については、ここをクリックしてupdate()下にスクロールします)。これは、ユーザーがスクロールするたびに呼び出される関数を実行します。

代わりに使用して x ミリ秒ごとにチェックすることもできますがsetInterval、自分自身を呼び出すタイムアウトを使用すると、ページはより迅速かつ確実に応答します。

基本的にupdate()、ページにいくつかのコンテンツを追加し、そのコンテンツが下にスクロールするのに十分でない場合は、タイムアウトを設定してupdate()再度呼び出します。1 ピクセルだけスクロールした場合は問題ありませんが、もちろん、スクロールすると数十または数百のスクロール イベントが送信されます。一度に数十 (または数百) のタイムアウトが実行されるため、これは問題になります。タイムアウトが多すぎると、私が目指していた新しいコンテンツを追加する一貫したアニメーションが失われます。

だから私は持っていたIDを使用してタイムアウトがすでに実行を待っているかどうかを確認したかったのですが、JavaScriptの関数はないようです。タイムアウトIDがまだ実行されているかどうかを確認する方法はありますか? そうでない場合、代替手段はありますか?私はJQueryを持っています。

...それとも、間隔をあけて応答性を犠牲にするべきですか?

4

1 に答える 1

4

関数が起動したら、間隔をクリアし、初期値を保持している変数を null に設定します。次に、null 値を確認します。これらをたくさん実行している場合は、持っている ID でそれらを配列に格納できます。

例えば:

var intervals = [];

if(intervals[id] != null){
    intervals[id] = setTimeout(some_func, 1000);

    var some_func = function(){
        // do stuff
        clearTimeout(intervals[id]);
        intervals[id] = null;
    }
}
于 2012-04-18T00:53:18.820 に答える