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(); }) ) ); });