Внедрил Infinite Scroll на своем сайте для просмотра товаров. Вроде все работает, но при быстром скролле загружаются повторные товары и т. д. При медленном же все работает. Можно ли сделать так, чтобы запрос отправлялся скажем каждые две секунды? Поставить задержку в двух словах. Страница: https://stockup.az/browse. Вот код:
var start = 0;
var limit = 4;
var reachedMax = false;
$(window).scroll(function () {
var md = $(document).height() - $(window).height() - $('footer').height() - 80;
if ($(window).scrollTop() > md)
getData();
});
$(document).ready(function () {
getData();
});
И функция getData()
function getData() {
if (reachedMax)
return;
$.ajax({
url: '../pages/data.php',
method: 'POST',
dataType: 'text',
data: {
getData: 1,
start: start,
limit: limit
},
success: function(response) {
if (response == "reachedMax")
reachedMax = true;
else {
start += limit;
$(".results").append(response);
}
}
});
}
Вы можете завести глобальный флаг allowLoading, который будет устанавливаться в false при начале загрузки и в true при ответе сервера. Заодно это даст возможность избавиться от переменной reachedMax:
var start = 0;
var limit = 4;
var allowLoading = true;
$(window).scroll(function () {
var md = $(document).height() - $(window).height() - $('footer').height() - 80;
if ($(window).scrollTop() > md)
getData();
});
$(document).ready(function () {
getData();
});
function getData() {
if(!allowLoading) {
return;
}
$.ajax({
url: '../pages/data.php',
method: 'POST',
dataType: 'text',
data: {
getData: 1,
start: start,
limit: limit
},
success: function(response) {
if (response == "reachedMax") {
allowLoading = false;
} else {
start += limit;
$(".results").append(response);
allowLoading = true;
}
},
error: function() {
// На случай если произошла ошибка сети
allowLoading = true;
}
});
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости