У меня есть эта функция бесконечной прокрутки, настроенная на нескольких моих страницах. Он отлично работает, но вызов 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, оно должно выполняться довольно быстро после прекращения прокрутки, но оно не выполняется вообще.