wp_back/wp-content/plugins/visual-portfolio/assets/js/pagination-infinite.js
2024-05-20 15:37:46 +03:00

52 lines
1.1 KiB
JavaScript

import $ from 'jquery';
import rafSchd from 'raf-schd';
import { throttle } from 'throttle-debounce';
const $wnd = $(window);
// Init infinite scroll pagination.
$(document).on('initEvents.vpf', (event, self) => {
if (event.namespace !== 'vpf' || self.options.pagination !== 'infinite') {
return;
}
const evp = `.vpf-uid-${self.uid}`;
const scrollThreshold = 400;
let visibilityCheckBusy = false;
function checkVisibilityAndLoad() {
if (visibilityCheckBusy || !self.options.nextPageUrl) {
return;
}
visibilityCheckBusy = true;
const rect = self.$item[0].getBoundingClientRect();
if (
rect.bottom > 0 &&
rect.bottom - scrollThreshold <= window.innerHeight
) {
self.loadNewItems(self.options.nextPageUrl, false, () => {
setTimeout(() => {
visibilityCheckBusy = false;
checkVisibilityAndLoad();
}, 300);
});
} else {
visibilityCheckBusy = false;
}
}
checkVisibilityAndLoad();
$wnd.on(
`load${evp} scroll${evp} resize${evp} orientationchange${evp}`,
throttle(
150,
rafSchd(() => {
checkVisibilityAndLoad();
})
)
);
});