52 lines
1.1 KiB
JavaScript
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();
|
||
|
})
|
||
|
)
|
||
|
);
|
||
|
});
|