UNPKG

ngx-infinite-scroller

Version:

Infinite bidirectional scroll directive for Angular 11

40 lines 6.39 kB
import isNumber from 'is-number'; import { InitialScrollPosition } from '../enum/initial-scroll-position-type.enum'; export class StrategyBase { constructor(directive, state) { this.directive = directive; this.state = state; } wasScrolledDown(prevPos, currentPos) { return prevPos.scrollTop < currentPos.scrollTop; } wasScrolledUp(prevPos, currentPos) { return !this.wasScrolledDown(prevPos, currentPos); } isScrollDownEnough(pos, scrollPositionTrigger) { return ((pos.scrollTop + pos.clientHeight) / pos.scrollHeight) > (scrollPositionTrigger / 100); } isScrollUpEnough(pos, scrollPositionTrigger) { return (pos.scrollTop / pos.scrollHeight) < (scrollPositionTrigger / 100); } getInitialScrollPositionValue(defaultScrollPosition) { const { initialScrollPosition } = this.directive; if (isNumber(initialScrollPosition)) { return Number(initialScrollPosition); } const initialScrollPositions = this.getInitialScrollPositions(); if (initialScrollPosition === InitialScrollPosition.DEFAULT) { return initialScrollPositions[defaultScrollPosition]; } return initialScrollPositions[initialScrollPosition]; } getInitialScrollPositions() { const { scrollHeight, clientHeight } = this.state; return { [InitialScrollPosition.TOP]: 0, [InitialScrollPosition.MIDDLE]: scrollHeight / 2 - clientHeight / 2, [InitialScrollPosition.BOTTOM]: scrollHeight, }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3ktYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8iLCJzb3VyY2VzIjpbInNyYy9hcHAvc2Nyb2xsaW5nLXN0cmF0ZWd5L3N0cmF0ZWd5LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBTWpDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWxGLE1BQU0sT0FBZ0IsWUFBWTtJQUNoQyxZQUNZLFNBQXVDLEVBQ3ZDLEtBQTRCO1FBRDVCLGNBQVMsR0FBVCxTQUFTLENBQThCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQXVCO0lBQ3BDLENBQUM7SUFFSyxlQUFlLENBQUMsT0FBdUIsRUFBRSxVQUEwQjtRQUMzRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRVMsYUFBYSxDQUFDLE9BQXVCLEVBQUUsVUFBMEI7UUFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxHQUFtQixFQUFFLHFCQUE2QjtRQUM3RSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsR0FBbUIsRUFBRSxxQkFBNkI7UUFDM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVTLDZCQUE2QixDQUFDLHFCQUE0QztRQUNsRixNQUFNLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRWpELElBQUksUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDbkMsT0FBTyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sc0JBQXNCLEdBQThCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRTNGLElBQUkscUJBQXFCLEtBQUsscUJBQXFCLENBQUMsT0FBTyxFQUFFO1lBQzNELE9BQU8sc0JBQXNCLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN0RDtRQUVELE9BQU8sc0JBQXNCLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVsRCxPQUFPO1lBQ0wsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQztZQUNuRSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVk7U0FDN0MsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc051bWJlciBmcm9tICdpcy1udW1iZXInO1xuXG5pbXBvcnQgeyBOZ3hJbmZpbml0ZVNjcm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vbmd4LWluZmluaXRlLXNjcm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaXJlY3RpdmVTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9kaXJlY3RpdmUtc3RhdGUuc2VydmljZSc7XG5cbmltcG9ydCB7IFNjcm9sbFBvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWwvc2Nyb2xsLXBvc2l0aW9uLm1vZGVsJztcbmltcG9ydCB7IEluaXRpYWxTY3JvbGxQb3NpdGlvbiB9IGZyb20gJy4uL2VudW0vaW5pdGlhbC1zY3JvbGwtcG9zaXRpb24tdHlwZS5lbnVtJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0cmF0ZWd5QmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBkaXJlY3RpdmU6IE5neEluZmluaXRlU2Nyb2xsZXJEaXJlY3RpdmUsXG4gICAgcHJvdGVjdGVkIHN0YXRlOiBEaXJlY3RpdmVTdGF0ZVNlcnZpY2VcbiAgKSB7IH1cblxuICBwcm90ZWN0ZWQgd2FzU2Nyb2xsZWREb3duKHByZXZQb3M6IFNjcm9sbFBvc2l0aW9uLCBjdXJyZW50UG9zOiBTY3JvbGxQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmV2UG9zLnNjcm9sbFRvcCA8IGN1cnJlbnRQb3Muc2Nyb2xsVG9wO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhc1Njcm9sbGVkVXAocHJldlBvczogU2Nyb2xsUG9zaXRpb24sIGN1cnJlbnRQb3M6IFNjcm9sbFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLndhc1Njcm9sbGVkRG93bihwcmV2UG9zLCBjdXJyZW50UG9zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1Njcm9sbERvd25Fbm91Z2gocG9zOiBTY3JvbGxQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb25UcmlnZ2VyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKChwb3Muc2Nyb2xsVG9wICsgcG9zLmNsaWVudEhlaWdodCkgLyBwb3Muc2Nyb2xsSGVpZ2h0KSA+IChzY3JvbGxQb3NpdGlvblRyaWdnZXIgLyAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzU2Nyb2xsVXBFbm91Z2gocG9zOiBTY3JvbGxQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb25UcmlnZ2VyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHBvcy5zY3JvbGxUb3AgLyBwb3Muc2Nyb2xsSGVpZ2h0KSA8IChzY3JvbGxQb3NpdGlvblRyaWdnZXIgLyAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEluaXRpYWxTY3JvbGxQb3NpdGlvblZhbHVlKGRlZmF1bHRTY3JvbGxQb3NpdGlvbjogSW5pdGlhbFNjcm9sbFBvc2l0aW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxQb3NpdGlvbiB9ID0gdGhpcy5kaXJlY3RpdmU7XG5cbiAgICBpZiAoaXNOdW1iZXIoaW5pdGlhbFNjcm9sbFBvc2l0aW9uKSkge1xuICAgICAgcmV0dXJuIE51bWJlcihpbml0aWFsU2Nyb2xsUG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTY3JvbGxQb3NpdGlvbnM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB0aGlzLmdldEluaXRpYWxTY3JvbGxQb3NpdGlvbnMoKTtcblxuICAgIGlmIChpbml0aWFsU2Nyb2xsUG9zaXRpb24gPT09IEluaXRpYWxTY3JvbGxQb3NpdGlvbi5ERUZBVUxUKSB7XG4gICAgICByZXR1cm4gaW5pdGlhbFNjcm9sbFBvc2l0aW9uc1tkZWZhdWx0U2Nyb2xsUG9zaXRpb25dO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsU2Nyb2xsUG9zaXRpb25zW2luaXRpYWxTY3JvbGxQb3NpdGlvbl07XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxTY3JvbGxQb3NpdGlvbnMoKTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSB7XG4gICAgY29uc3QgeyBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICBbSW5pdGlhbFNjcm9sbFBvc2l0aW9uLlRPUF06IDAsXG4gICAgICBbSW5pdGlhbFNjcm9sbFBvc2l0aW9uLk1JRERMRV06IHNjcm9sbEhlaWdodCAvIDIgLSBjbGllbnRIZWlnaHQgLyAyLFxuICAgICAgW0luaXRpYWxTY3JvbGxQb3NpdGlvbi5CT1RUT01dOiBzY3JvbGxIZWlnaHQsXG4gICAgfTtcbiAgfVxufVxuIl19