この無限スクロール機能をいくつかのページに設定しています。完全に正常に機能しますが、より多くのアイテムをロードするためのAjax呼び出しは、複数のデータベース呼び出しを行い、毎回多くの画像をロードする必要があり、通常、ロードには数秒かかります。接続に応じて、3〜7秒のタイミングで時間を計りました。このため、ブラウザがスクロールイベントを数回発生させることを決定すると、実際の列車の大破に変わる可能性があります。ブラウザが数秒の間にAjax呼び出しを数回実行せず、すべてを停止するように、スロットルまたはデバウンスを実行するにはどうすればよいですか?
$(document).ready()
{
//Infinite scroll
$(window).on('scroll', _.debounce( function(){
var height = $(window).height();
var scrollTop = $(window).scrollTop();
var dHeight = getDocHeight();
if( height + scrollTop >= dHeight - 100)
{
//Display items that were previously hidden
showAllItems();
if(!vloaded < START_NUM && !done){
//Load next set of items
$.ajax
({
type: "POST",
url: "/organizer/getMore",
data: { filter: vfilter, loaded: vloaded },
dataType: "html",
success: function( responseText, textStatus, XHR )
{
if(responseText.indexOf("// GRID ENTRY //") < 0){ //Out of items to load
done = true;
}
else{
//Display items that were previously hidden
showAllItems();
// select the element with the ID grid and insert the HTML
$( "#grid" ).append( responseText );
//alert("Loaded "+vloaded+" items");
}
}
});
// global variable
vloaded +=LOAD_NUM;
} // if
}
}
}, 500, true)); // on
} // ready
編集:
アンダースコアをダウンロードしてデバウンス機能を追加しましたが、Ajax呼び出しがまったく実行されていないようです。すぐにtrueに設定していなくても、スクロールを停止するとすぐに実行されるはずですが、まったく実行されません。