Site/static/programmer/js/infinite_scroll.js

50 lines
1.6 KiB
JavaScript

(function() {
let currentPage = window.currentPage || 1;
let totalPages = window.totalPages || 1;
let loading = false;
const container = document.getElementById('projects-container');
const spinner = document.getElementById('loading-spinner');
if (!container || currentPage >= totalPages) return;
function shouldLoad() {
if (loading) return false;
const scrollPosition = window.scrollY + window.innerHeight;
const threshold = document.documentElement.scrollHeight - 300;
return scrollPosition >= threshold;
}
function loadNextPage() {
if (!shouldLoad()) return;
loading = true;
if (spinner) spinner.style.display = 'block';
const nextPage = currentPage + 1;
fetch(`?page=${nextPage}`, {
headers: { 'X-Requested-With': 'XMLHttpRequest' }
})
.then(response => response.json())
.then(data => {
if (data.html) {
container.insertAdjacentHTML('beforeend', data.html);
currentPage = nextPage;
}
if (spinner) spinner.style.display = 'none';
loading = false;
if (currentPage >= totalPages) spinner?.remove();
})
.catch(error => {
console.error('Ошибка загрузки:', error);
if (spinner) spinner.style.display = 'none';
loading = false;
});
}
let timer;
window.addEventListener('scroll', () => {
clearTimeout(timer);
timer = setTimeout(loadNextPage, 150);
});
window.addEventListener('load', loadNextPage);
})();