UNPKG

ngx-scroll-lock

Version:
146 lines 12.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, ViewEncapsulation, isDevMode, } from '@angular/core'; export class NgxScrollLockComponent { constructor() { this.target = ''; this.lock = false; this.listenerOptions = { capture: false, passive: false, }; } /** * @return {?} */ ngOnInit() { this.targetElement = this.target ? document.querySelector(this.target) : document.body; // Shows error message only in Development if (!this.targetElement && isDevMode()) { console.error( // tslint:disable-next-line: max-line-length `\`NgxScrollLockComponent\` need to receive "target" as an element, but it received "${this.target || 'body'}". Please check if the element is unique and it's available in your DOM.`); } if (this.lock && this.targetElement) { this.disableLock(this.targetElement); } } /** * @return {?} */ ngOnDestroy() { if (this.targetElement) { this.enableLock(this.targetElement); } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes.target && !changes.target.firstChange && changes.target.previousValue !== changes.target.currentValue) { this.enableLock(this.targetElement); this.targetElement = this.target ? document.querySelector(this.target) : document.body; if (this.lock && this.targetElement) { this.disableLock(this.targetElement); } } if (changes.lock && !changes.lock.firstChange && changes.lock.previousValue !== changes.lock.currentValue && this.targetElement) { changes.lock.currentValue ? this.disableLock(this.targetElement) : this.enableLock(this.targetElement); } } /** * @param {?} target * @return {?} */ disableLock(target) { this.targetElement.classList.add('ngx-scroll-lock'); // Mobile Safari ignores { overflow: hidden } declaration on the body. if (this.isTouchDevice()) { this.targetElement.addEventListener('touchmove', this.preventTouchMove, this.listenerOptions); } } /** * @param {?} target * @return {?} */ enableLock(target) { this.targetElement.classList.remove('ngx-scroll-lock'); if (this.isTouchDevice()) { this.targetElement.removeEventListener('touchmove', this.preventTouchMove, this.listenerOptions); } } /** * @return {?} */ isTouchDevice() { return !!window && ('ontouchstart' in window || navigator.maxTouchPoints); } /** * @param {?} rawEvent * @return {?} */ preventTouchMove(rawEvent) { /** @type {?} */ const e = rawEvent || Object.assign({}, ((/** @type {?} */ (window))).event, { touches: [] }); // // Do not prevent if the event has more than one touch // (usually meaning this is a single or multi touch gesture like pinch to zoom) if (e.touches && e.touches.length >= 1) { return true; } if (e.preventDefault) { e.preventDefault(); } return false; } } NgxScrollLockComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-scroll-lock', template: ` <style> .ngx-scroll-lock { box-sizing: border-box !important; overflow: hidden !important; position: inherit !important; } </style> <ng-content></ng-content> `, encapsulation: ViewEncapsulation.None }] } ]; NgxScrollLockComponent.propDecorators = { target: [{ type: Input }], lock: [{ type: Input }] }; if (false) { /** @type {?} */ NgxScrollLockComponent.prototype.target; /** @type {?} */ NgxScrollLockComponent.prototype.lock; /** * @type {?} * @private */ NgxScrollLockComponent.prototype.targetElement; /** * @type {?} * @private */ NgxScrollLockComponent.prototype.listenerOptions; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNjcm9sbC1sb2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY3JvbGwtbG9jay8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtc2Nyb2xsLWxvY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFHTCxpQkFBaUIsRUFDakIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBZ0J2QixNQUFNLE9BQU8sc0JBQXNCO0lBZG5DO1FBZ0JFLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHWixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBSUwsb0JBQWUsR0FBRztZQUN4QixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztJQWlHSixDQUFDOzs7O0lBL0ZDLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzlCLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFbEIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sQ0FBQyxLQUFLO1lBQ1gsNENBQTRDO1lBQzVDLHVGQUNFLElBQUksQ0FBQyxNQUFNLElBQUksTUFDakIsMEVBQTBFLENBQzNFLENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQzs7OztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUNFLE9BQU8sQ0FBQyxNQUFNO1lBQ2QsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVc7WUFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQzVEO1lBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTTtnQkFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxJQUNFLE9BQU8sQ0FBQyxJQUFJO1lBQ1osQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3hELElBQUksQ0FBQyxhQUFhLEVBQ2xCO1lBQ0EsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxNQUFtQjtRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVwRCxzRUFBc0U7UUFDdEUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDakMsV0FBVyxFQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxVQUFVLENBQUMsTUFBbUI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDcEMsV0FBVyxFQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7OztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1RSxDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLFFBQW9COztjQUM3QixDQUFDLEdBQUcsUUFBUSxzQkFBUyxDQUFDLG1CQUFBLE1BQU0sRUFBTyxDQUFDLENBQUMsS0FBSyxJQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUU7UUFDL0QseURBQXlEO1FBQ3pELCtFQUErRTtRQUMvRSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUU7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7WUExSEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRTs7Ozs7Ozs7O0dBU1Q7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztxQkFFRSxLQUFLO21CQUdMLEtBQUs7Ozs7SUFITix3Q0FDWTs7SUFFWixzQ0FDYTs7Ozs7SUFFYiwrQ0FBbUM7Ozs7O0lBRW5DLGlEQUdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1zY3JvbGwtbG9jaycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHN0eWxlPlxuICAgICAgLm5neC1zY3JvbGwtbG9jayB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICBwb3NpdGlvbjogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hTY3JvbGxMb2NrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIHRhcmdldCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGxvY2sgPSBmYWxzZTtcblxuICBwcml2YXRlIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIHByaXZhdGUgbGlzdGVuZXJPcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IGZhbHNlLFxuICAgIHBhc3NpdmU6IGZhbHNlLFxuICB9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudGFyZ2V0RWxlbWVudCA9IHRoaXMudGFyZ2V0XG4gICAgICA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy50YXJnZXQpXG4gICAgICA6IGRvY3VtZW50LmJvZHk7XG5cbiAgICAvLyBTaG93cyBlcnJvciBtZXNzYWdlIG9ubHkgaW4gRGV2ZWxvcG1lbnRcbiAgICBpZiAoIXRoaXMudGFyZ2V0RWxlbWVudCAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgYFxcYE5neFNjcm9sbExvY2tDb21wb25lbnRcXGAgbmVlZCB0byByZWNlaXZlIFwidGFyZ2V0XCIgYXMgYW4gZWxlbWVudCwgYnV0IGl0IHJlY2VpdmVkIFwiJHtcbiAgICAgICAgICB0aGlzLnRhcmdldCB8fCAnYm9keSdcbiAgICAgICAgfVwiLiBQbGVhc2UgY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdW5pcXVlIGFuZCBpdCdzIGF2YWlsYWJsZSBpbiB5b3VyIERPTS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvY2sgJiYgdGhpcy50YXJnZXRFbGVtZW50KSB7XG4gICAgICB0aGlzLmRpc2FibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudGFyZ2V0RWxlbWVudCkge1xuICAgICAgdGhpcy5lbmFibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMudGFyZ2V0ICYmXG4gICAgICAhY2hhbmdlcy50YXJnZXQuZmlyc3RDaGFuZ2UgJiZcbiAgICAgIGNoYW5nZXMudGFyZ2V0LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMudGFyZ2V0LmN1cnJlbnRWYWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5lbmFibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgICB0aGlzLnRhcmdldEVsZW1lbnQgPSB0aGlzLnRhcmdldFxuICAgICAgICA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy50YXJnZXQpXG4gICAgICAgIDogZG9jdW1lbnQuYm9keTtcbiAgICAgIGlmICh0aGlzLmxvY2sgJiYgdGhpcy50YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUxvY2sodGhpcy50YXJnZXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5sb2NrICYmXG4gICAgICAhY2hhbmdlcy5sb2NrLmZpcnN0Q2hhbmdlICYmXG4gICAgICBjaGFuZ2VzLmxvY2sucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5sb2NrLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgdGhpcy50YXJnZXRFbGVtZW50XG4gICAgKSB7XG4gICAgICBjaGFuZ2VzLmxvY2suY3VycmVudFZhbHVlXG4gICAgICAgID8gdGhpcy5kaXNhYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpXG4gICAgICAgIDogdGhpcy5lbmFibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZUxvY2sodGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMudGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCduZ3gtc2Nyb2xsLWxvY2snKTtcblxuICAgIC8vIE1vYmlsZSBTYWZhcmkgaWdub3JlcyB7IG92ZXJmbG93OiBoaWRkZW4gfSBkZWNsYXJhdGlvbiBvbiB0aGUgYm9keS5cbiAgICBpZiAodGhpcy5pc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIHRoaXMudGFyZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAndG91Y2htb3ZlJyxcbiAgICAgICAgdGhpcy5wcmV2ZW50VG91Y2hNb3ZlLFxuICAgICAgICB0aGlzLmxpc3RlbmVyT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGVMb2NrKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnbmd4LXNjcm9sbC1sb2NrJyk7XG5cbiAgICBpZiAodGhpcy5pc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIHRoaXMudGFyZ2V0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAndG91Y2htb3ZlJyxcbiAgICAgICAgdGhpcy5wcmV2ZW50VG91Y2hNb3ZlLFxuICAgICAgICB0aGlzLmxpc3RlbmVyT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpc1RvdWNoRGV2aWNlKCkge1xuICAgIHJldHVybiAhIXdpbmRvdyAmJiAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyk7XG4gIH1cblxuICBwcmV2ZW50VG91Y2hNb3ZlKHJhd0V2ZW50OiBUb3VjaEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZSA9IHJhd0V2ZW50IHx8IHsgLi4uKHdpbmRvdyBhcyBhbnkpLmV2ZW50LCB0b3VjaGVzOiBbXSB9O1xuICAgIC8vIC8vIERvIG5vdCBwcmV2ZW50IGlmIHRoZSBldmVudCBoYXMgbW9yZSB0aGFuIG9uZSB0b3VjaFxuICAgIC8vICh1c3VhbGx5IG1lYW5pbmcgdGhpcyBpcyBhIHNpbmdsZSBvciBtdWx0aSB0b3VjaCBnZXN0dXJlIGxpa2UgcGluY2ggdG8gem9vbSlcbiAgICBpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPj0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==