ngx-infinite-scroll
Version:
[](https://travis-ci.org/orizens/ngx-infinite-scroll) [](#backers) [![Sponso
68 lines • 10.1 kB
JavaScript
export function shouldFireScrollEvent(container, distance = { down: 0, up: 0 }, scrollingDown) {
let remaining;
let containerBreakpoint;
if (container.totalToScroll <= 0) {
return false;
}
const scrolledUntilNow = container.isWindow
? container.scrolled
: container.height + container.scrolled;
if (scrollingDown) {
remaining =
(container.totalToScroll - scrolledUntilNow) / container.totalToScroll;
const distanceDown = distance?.down ? distance.down : 0;
containerBreakpoint = distanceDown / 10;
}
else {
const totalHiddenContentHeight = container.scrolled + (container.totalToScroll - scrolledUntilNow);
remaining = container.scrolled / totalHiddenContentHeight;
const distanceUp = distance?.up ? distance.up : 0;
containerBreakpoint = distanceUp / 10;
}
const shouldFireEvent = remaining <= containerBreakpoint;
return shouldFireEvent;
}
export function isScrollingDownwards(lastScrollPosition, container) {
return lastScrollPosition < container.scrolled;
}
export function getScrollStats(lastScrollPosition, container, distance) {
const scrollDown = isScrollingDownwards(lastScrollPosition, container);
return {
fire: shouldFireScrollEvent(container, distance, scrollDown),
scrollDown,
};
}
export function updateScrollPosition(position, scrollState) {
return (scrollState.lastScrollPosition = position);
}
export function updateTotalToScroll(totalToScroll, scrollState) {
if (scrollState.lastTotalToScroll !== totalToScroll) {
scrollState.lastTotalToScroll = scrollState.totalToScroll;
scrollState.totalToScroll = totalToScroll;
}
}
export function isSameTotalToScroll(scrollState) {
return scrollState.totalToScroll === scrollState.lastTotalToScroll;
}
export function updateTriggeredFlag(scroll, scrollState, triggered, isScrollingDown) {
if (isScrollingDown) {
scrollState.triggered.down = scroll;
}
else {
scrollState.triggered.up = scroll;
}
}
export function isTriggeredScroll(totalToScroll, scrollState, isScrollingDown) {
return isScrollingDown
? scrollState.triggered.down === totalToScroll
: scrollState.triggered.up === totalToScroll;
}
export function updateScrollState(scrollState, scrolledUntilNow, totalToScroll) {
updateScrollPosition(scrolledUntilNow, scrollState);
updateTotalToScroll(totalToScroll, scrollState);
// const isSameTotal = isSameTotalToScroll(scrollState);
// if (!isSameTotal) {
// updateTriggeredFlag(scrollState, false, isScrollingDown);
// }
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWluZmluaXRlLXNjcm9sbC9zcmMvbGliL3NlcnZpY2VzL3Njcm9sbC1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFNBQXlCLEVBQ3pCLFdBQThCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQ2hELGFBQXNCO0lBRXRCLElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLG1CQUEyQixDQUFDO0lBQ2hDLElBQUksU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUU7UUFDaEMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVE7UUFDekMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRO1FBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDMUMsSUFBSSxhQUFhLEVBQUU7UUFDakIsU0FBUztZQUNQLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELG1CQUFtQixHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7S0FDekM7U0FBTTtRQUNMLE1BQU0sd0JBQXdCLEdBQzVCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELG1CQUFtQixHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7S0FDdkM7SUFFRCxNQUFNLGVBQWUsR0FBWSxTQUFTLElBQUksbUJBQW1CLENBQUM7SUFDbEUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsa0JBQTBCLEVBQzFCLFNBQXlCO0lBRXpCLE9BQU8sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsa0JBQTBCLEVBQzFCLFNBQXlCLEVBQ3pCLFFBQTJCO0lBRTNCLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU87UUFDTCxJQUFJLEVBQUUscUJBQXFCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUM7UUFDNUQsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFnQixFQUNoQixXQUF5QjtJQUV6QixPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLGFBQXFCLEVBQ3JCLFdBQXlCO0lBRXpCLElBQUksV0FBVyxDQUFDLGlCQUFpQixLQUFLLGFBQWEsRUFBRTtRQUNuRCxXQUFXLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUMxRCxXQUFXLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztLQUMzQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsV0FBeUI7SUFDM0QsT0FBTyxXQUFXLENBQUMsYUFBYSxLQUFLLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFjLEVBQ2QsV0FBeUIsRUFDekIsU0FBa0IsRUFDbEIsZUFBd0I7SUFFeEIsSUFBSSxlQUFlLEVBQUU7UUFDbkIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ3JDO1NBQU07UUFDTCxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDbkM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixhQUFxQixFQUNyQixXQUF5QixFQUN6QixlQUF3QjtJQUV4QixPQUFPLGVBQWU7UUFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLGFBQWE7UUFDOUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixXQUF5QixFQUN6QixnQkFBd0IsRUFDeEIsYUFBcUI7SUFFckIsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEQsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELHdEQUF3RDtJQUN4RCxzQkFBc0I7SUFDdEIsOERBQThEO0lBQzlELElBQUk7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVBvc2l0aW9uU3RhdHMsIElTY3JvbGxTdGF0ZSwgSVNjcm9sbGVyRGlzdGFuY2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRmlyZVNjcm9sbEV2ZW50KFxuICBjb250YWluZXI6IElQb3NpdGlvblN0YXRzLFxuICBkaXN0YW5jZTogSVNjcm9sbGVyRGlzdGFuY2UgPSB7IGRvd246IDAsIHVwOiAwIH0sXG4gIHNjcm9sbGluZ0Rvd246IGJvb2xlYW5cbikge1xuICBsZXQgcmVtYWluaW5nOiBudW1iZXI7XG4gIGxldCBjb250YWluZXJCcmVha3BvaW50OiBudW1iZXI7XG4gIGlmIChjb250YWluZXIudG90YWxUb1Njcm9sbCA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2Nyb2xsZWRVbnRpbE5vdyA9IGNvbnRhaW5lci5pc1dpbmRvd1xuICAgID8gY29udGFpbmVyLnNjcm9sbGVkXG4gICAgOiBjb250YWluZXIuaGVpZ2h0ICsgY29udGFpbmVyLnNjcm9sbGVkO1xuICBpZiAoc2Nyb2xsaW5nRG93bikge1xuICAgIHJlbWFpbmluZyA9XG4gICAgICAoY29udGFpbmVyLnRvdGFsVG9TY3JvbGwgLSBzY3JvbGxlZFVudGlsTm93KSAvIGNvbnRhaW5lci50b3RhbFRvU2Nyb2xsO1xuICAgIGNvbnN0IGRpc3RhbmNlRG93biA9IGRpc3RhbmNlPy5kb3duID8gZGlzdGFuY2UuZG93biA6IDA7XG4gICAgY29udGFpbmVyQnJlYWtwb2ludCA9IGRpc3RhbmNlRG93biAvIDEwO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRvdGFsSGlkZGVuQ29udGVudEhlaWdodCA9XG4gICAgICBjb250YWluZXIuc2Nyb2xsZWQgKyAoY29udGFpbmVyLnRvdGFsVG9TY3JvbGwgLSBzY3JvbGxlZFVudGlsTm93KTtcbiAgICByZW1haW5pbmcgPSBjb250YWluZXIuc2Nyb2xsZWQgLyB0b3RhbEhpZGRlbkNvbnRlbnRIZWlnaHQ7XG4gICAgY29uc3QgZGlzdGFuY2VVcCA9IGRpc3RhbmNlPy51cCA/IGRpc3RhbmNlLnVwIDogMDtcbiAgICBjb250YWluZXJCcmVha3BvaW50ID0gZGlzdGFuY2VVcCAvIDEwO1xuICB9XG5cbiAgY29uc3Qgc2hvdWxkRmlyZUV2ZW50OiBib29sZWFuID0gcmVtYWluaW5nIDw9IGNvbnRhaW5lckJyZWFrcG9pbnQ7XG4gIHJldHVybiBzaG91bGRGaXJlRXZlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbGluZ0Rvd253YXJkcyhcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIsXG4gIGNvbnRhaW5lcjogSVBvc2l0aW9uU3RhdHNcbikge1xuICByZXR1cm4gbGFzdFNjcm9sbFBvc2l0aW9uIDwgY29udGFpbmVyLnNjcm9sbGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsU3RhdHMoXG4gIGxhc3RTY3JvbGxQb3NpdGlvbjogbnVtYmVyLFxuICBjb250YWluZXI6IElQb3NpdGlvblN0YXRzLFxuICBkaXN0YW5jZTogSVNjcm9sbGVyRGlzdGFuY2Vcbikge1xuICBjb25zdCBzY3JvbGxEb3duID0gaXNTY3JvbGxpbmdEb3dud2FyZHMobGFzdFNjcm9sbFBvc2l0aW9uLCBjb250YWluZXIpO1xuICByZXR1cm4ge1xuICAgIGZpcmU6IHNob3VsZEZpcmVTY3JvbGxFdmVudChjb250YWluZXIsIGRpc3RhbmNlLCBzY3JvbGxEb3duKSxcbiAgICBzY3JvbGxEb3duLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsUG9zaXRpb24oXG4gIHBvc2l0aW9uOiBudW1iZXIsXG4gIHNjcm9sbFN0YXRlOiBJU2Nyb2xsU3RhdGVcbikge1xuICByZXR1cm4gKHNjcm9sbFN0YXRlLmxhc3RTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVRvdGFsVG9TY3JvbGwoXG4gIHRvdGFsVG9TY3JvbGw6IG51bWJlcixcbiAgc2Nyb2xsU3RhdGU6IElTY3JvbGxTdGF0ZVxuKSB7XG4gIGlmIChzY3JvbGxTdGF0ZS5sYXN0VG90YWxUb1Njcm9sbCAhPT0gdG90YWxUb1Njcm9sbCkge1xuICAgIHNjcm9sbFN0YXRlLmxhc3RUb3RhbFRvU2Nyb2xsID0gc2Nyb2xsU3RhdGUudG90YWxUb1Njcm9sbDtcbiAgICBzY3JvbGxTdGF0ZS50b3RhbFRvU2Nyb2xsID0gdG90YWxUb1Njcm9sbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lVG90YWxUb1Njcm9sbChzY3JvbGxTdGF0ZTogSVNjcm9sbFN0YXRlKSB7XG4gIHJldHVybiBzY3JvbGxTdGF0ZS50b3RhbFRvU2Nyb2xsID09PSBzY3JvbGxTdGF0ZS5sYXN0VG90YWxUb1Njcm9sbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVRyaWdnZXJlZEZsYWcoXG4gIHNjcm9sbDogbnVtYmVyLFxuICBzY3JvbGxTdGF0ZTogSVNjcm9sbFN0YXRlLFxuICB0cmlnZ2VyZWQ6IGJvb2xlYW4sXG4gIGlzU2Nyb2xsaW5nRG93bjogYm9vbGVhblxuKSB7XG4gIGlmIChpc1Njcm9sbGluZ0Rvd24pIHtcbiAgICBzY3JvbGxTdGF0ZS50cmlnZ2VyZWQuZG93biA9IHNjcm9sbDtcbiAgfSBlbHNlIHtcbiAgICBzY3JvbGxTdGF0ZS50cmlnZ2VyZWQudXAgPSBzY3JvbGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHJpZ2dlcmVkU2Nyb2xsKFxuICB0b3RhbFRvU2Nyb2xsOiBudW1iZXIsXG4gIHNjcm9sbFN0YXRlOiBJU2Nyb2xsU3RhdGUsXG4gIGlzU2Nyb2xsaW5nRG93bjogYm9vbGVhblxuKSB7XG4gIHJldHVybiBpc1Njcm9sbGluZ0Rvd25cbiAgICA/IHNjcm9sbFN0YXRlLnRyaWdnZXJlZC5kb3duID09PSB0b3RhbFRvU2Nyb2xsXG4gICAgOiBzY3JvbGxTdGF0ZS50cmlnZ2VyZWQudXAgPT09IHRvdGFsVG9TY3JvbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTY3JvbGxTdGF0ZShcbiAgc2Nyb2xsU3RhdGU6IElTY3JvbGxTdGF0ZSxcbiAgc2Nyb2xsZWRVbnRpbE5vdzogbnVtYmVyLFxuICB0b3RhbFRvU2Nyb2xsOiBudW1iZXJcbikge1xuICB1cGRhdGVTY3JvbGxQb3NpdGlvbihzY3JvbGxlZFVudGlsTm93LCBzY3JvbGxTdGF0ZSk7XG4gIHVwZGF0ZVRvdGFsVG9TY3JvbGwodG90YWxUb1Njcm9sbCwgc2Nyb2xsU3RhdGUpO1xuICAvLyBjb25zdCBpc1NhbWVUb3RhbCA9IGlzU2FtZVRvdGFsVG9TY3JvbGwoc2Nyb2xsU3RhdGUpO1xuICAvLyBpZiAoIWlzU2FtZVRvdGFsKSB7XG4gIC8vICAgdXBkYXRlVHJpZ2dlcmVkRmxhZyhzY3JvbGxTdGF0ZSwgZmFsc2UsIGlzU2Nyb2xsaW5nRG93bik7XG4gIC8vIH1cbn1cbiJdfQ==