2016-04-21 8 views
0

私は、ユーザーがページの一番下にスクロールするときに一度に最大40個の要素を呼び出す「無限スクロール」ページを使用しています。最新のセットのすべてのコンテンツがロードされた瞬間をどのように検出するのですか?無限のスクロールが終了するまで待機する - Javascript

初期のページロードでしか動作:ページがすでにロードを行われたずっと後に「負荷」がありますときのために類似した何かが

$(window).load(function() { 
    // Do something 
}); 

ありますか?

これは別の質問の繰り返しです。他の場所で解決策を見つけることができませんでした。

+0

無限大の場合は、最後まで待つことができますか? lol –

+0

@AdamBuchananSmith - 次の要素のセットが完了したら、私は話しています。無限のスクロールでは、ユーザーが次のインクリメント(通常はページの一番下にあるスクロール)を読み込むまで、すべての可能なデータを一度に読み込みません。私は直近のインクリメントがレンダリングを終了したときに検出したい。 – Andrew

+0

私は決して質問を読んでいない、私は見出しだけを読む –

答えて

1

もう少し掘り下げてから、私はquestion/answerのバリエーションを使用しました。

私の最終的な結果は次のようになります。

function ($container, previousCount, callback) { 
    var _imgs = $container.find('img'), 
     _newImages = _imgs.slice(previousCount), // 'start index' for new images 
     imgCount = _newImages.length, // count how many new ones exist 
     counter = 0; 

    _imgs.on('load', function() { // Count loaded 
     runCallback(20, callback); 
    }).on('error', function() { // Count errors, anyway, to reach total 
     runCallback(20, callback); 
    }); 

    function runCallback(counterLimit, callback) { 
     // if counter meets new count or hits counter limit, run callback 
     counter++; 
     if (counter == imgCount || counter == counterLimit) { 
      callback(); 
     } 
    } 
} 

私はこのようにそれを必要とする理由にはいくつかの癖が。 previousCountは実際には現在DOM内にある画像の総数よりも大きくなる可能性があります。これは、人々が無限スクロールの異なる部分にジャンプできるためです。このため、counter == counterLimitのチェックもあります。

また、成功したか失敗したかにかかわらず、新しいイメージセットが読み込まれたときにスクリプトを実行する必要があります。このため、私は.on('load'.on('error'の両方を使用してカウントを実行しています。私はときどきイメージがエラーになることがあることに気付きました(これはこの特定のケースでは問題ありません)。それはカウントを捨て、決してコールバックを起動しません。

==================

EDIT 04/27/16:私は以来、あなたのためにこれを扱うことができるプラグインを発見したと思わました(以前のロードがロードされる前のいくつかの後続のロードを除いて) imagesLoadedをチェックしてください。

関連する問題