ngx-scroll-lock
Version:
Angular module for Page Scroll locking
165 lines • 13.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, ViewEncapsulation, isDevMode, } from '@angular/core';
var NgxScrollLockComponent = /** @class */ (function () {
function NgxScrollLockComponent() {
this.target = '';
this.lock = false;
this.listenerOptions = {
capture: false,
passive: false,
};
}
/**
* @return {?}
*/
NgxScrollLockComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 {?}
*/
NgxScrollLockComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.targetElement) {
this.enableLock(this.targetElement);
}
};
/**
* @param {?} changes
* @return {?}
*/
NgxScrollLockComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (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 {?}
*/
NgxScrollLockComponent.prototype.disableLock = /**
* @param {?} target
* @return {?}
*/
function (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 {?}
*/
NgxScrollLockComponent.prototype.enableLock = /**
* @param {?} target
* @return {?}
*/
function (target) {
this.targetElement.classList.remove('ngx-scroll-lock');
if (this.isTouchDevice()) {
this.targetElement.removeEventListener('touchmove', this.preventTouchMove, this.listenerOptions);
}
};
/**
* @return {?}
*/
NgxScrollLockComponent.prototype.isTouchDevice = /**
* @return {?}
*/
function () {
return !!window && ('ontouchstart' in window || navigator.maxTouchPoints);
};
/**
* @param {?} rawEvent
* @return {?}
*/
NgxScrollLockComponent.prototype.preventTouchMove = /**
* @param {?} rawEvent
* @return {?}
*/
function (rawEvent) {
/** @type {?} */
var e = rawEvent || tslib_1.__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: "\n <style>\n .ngx-scroll-lock {\n box-sizing: border-box !important;\n overflow: hidden !important;\n position: inherit !important;\n }\n </style>\n <ng-content></ng-content>\n ",
encapsulation: ViewEncapsulation.None
}] }
];
NgxScrollLockComponent.propDecorators = {
target: [{ type: Input }],
lock: [{ type: Input }]
};
return NgxScrollLockComponent;
}());
export { NgxScrollLockComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNjcm9sbC1sb2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY3JvbGwtbG9jay8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtc2Nyb2xsLWxvY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxLQUFLLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QjtJQUFBO1FBZ0JFLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHWixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBSUwsb0JBQWUsR0FBRztZQUN4QixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztJQWlHSixDQUFDOzs7O0lBL0ZDLHlDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUVsQiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxDQUFDLEtBQUs7WUFDWCw0Q0FBNEM7WUFDNUMsMkZBQ0UsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLCtFQUNtRCxDQUMzRSxDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7Ozs7SUFFRCw0Q0FBVzs7O0lBQVg7UUFDRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFD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b0JBQzNCLFFBQVEsRUFBRSw0TkFTVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Ozt5QkFFRSxLQUFLO3VCQUdMLEtBQUs7O0lBeUdSLDZCQUFDO0NBQUEsQUEzSEQsSUEySEM7U0E3R1ksc0JBQXNCOzs7SUFDakMsd0NBQ1k7O0lBRVosc0NBQ2E7Ozs7O0lBRWIsK0NBQW1DOzs7OztJQUVuQyxpREFHRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc2Nyb2xsLWxvY2snLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzdHlsZT5cbiAgICAgIC5uZ3gtc2Nyb2xsLWxvY2sge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4U2Nyb2xsTG9ja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICB0YXJnZXQgPSAnJztcblxuICBASW5wdXQoKVxuICBsb2NrID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGxpc3RlbmVyT3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhcmdldEVsZW1lbnQgPSB0aGlzLnRhcmdldFxuICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KVxuICAgICAgOiBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gU2hvd3MgZXJyb3IgbWVzc2FnZSBvbmx5IGluIERldmVsb3BtZW50XG4gICAgaWYgKCF0aGlzLnRhcmdldEVsZW1lbnQgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGBcXGBOZ3hTY3JvbGxMb2NrQ29tcG9uZW50XFxgIG5lZWQgdG8gcmVjZWl2ZSBcInRhcmdldFwiIGFzIGFuIGVsZW1lbnQsIGJ1dCBpdCByZWNlaXZlZCBcIiR7XG4gICAgICAgICAgdGhpcy50YXJnZXQgfHwgJ2JvZHknXG4gICAgICAgIH1cIi4gUGxlYXNlIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIHVuaXF1ZSBhbmQgaXQncyBhdmFpbGFibGUgaW4geW91ciBET00uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2NrICYmIHRoaXMudGFyZ2V0RWxlbWVudCkge1xuICAgICAgdGhpcy5kaXNhYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLnRhcmdldCAmJlxuICAgICAgIWNoYW5nZXMudGFyZ2V0LmZpcnN0Q2hhbmdlICYmXG4gICAgICBjaGFuZ2VzLnRhcmdldC5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzLnRhcmdldC5jdXJyZW50VmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gdGhpcy50YXJnZXRcbiAgICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KVxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XG4gICAgICBpZiAodGhpcy5sb2NrICYmIHRoaXMudGFyZ2V0RWxlbWVudCkge1xuICAgICAgICB0aGlzLmRpc2FibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMubG9jayAmJlxuICAgICAgIWNoYW5nZXMubG9jay5maXJzdENoYW5nZSAmJlxuICAgICAgY2hhbmdlcy5sb2NrLnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMubG9jay5jdXJyZW50VmFsdWUgJiZcbiAgICAgIHRoaXMudGFyZ2V0RWxlbWVudFxuICAgICkge1xuICAgICAgY2hhbmdlcy5sb2NrLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IHRoaXMuZGlzYWJsZUxvY2sodGhpcy50YXJnZXRFbGVtZW50KVxuICAgICAgICA6IHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVMb2NrKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbmd4LXNjcm9sbC1sb2NrJyk7XG5cbiAgICAvLyBNb2JpbGUgU2FmYXJpIGlnbm9yZXMgeyBvdmVyZmxvdzogaGlkZGVuIH0gZGVjbGFyYXRpb24gb24gdGhlIGJvZHkuXG4gICAgaWYgKHRoaXMuaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0aGlzLnRhcmdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgIHRoaXMucHJldmVudFRvdWNoTW92ZSxcbiAgICAgICAgdGhpcy5saXN0ZW5lck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlTG9jayh0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy50YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ25neC1zY3JvbGwtbG9jaycpO1xuXG4gICAgaWYgKHRoaXMuaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0aGlzLnRhcmdldEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgIHRoaXMucHJldmVudFRvdWNoTW92ZSxcbiAgICAgICAgdGhpcy5saXN0ZW5lck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaXNUb3VjaERldmljZSgpIHtcbiAgICByZXR1cm4gISF3aW5kb3cgJiYgKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMpO1xuICB9XG5cbiAgcHJldmVudFRvdWNoTW92ZShyYXdFdmVudDogVG91Y2hFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGUgPSByYXdFdmVudCB8fCB7IC4uLih3aW5kb3cgYXMgYW55KS5ldmVudCwgdG91Y2hlczogW10gfTtcbiAgICAvLyAvLyBEbyBub3QgcHJldmVudCBpZiB0aGUgZXZlbnQgaGFzIG1vcmUgdGhhbiBvbmUgdG91Y2hcbiAgICAvLyAodXN1YWxseSBtZWFuaW5nIHRoaXMgaXMgYSBzaW5nbGUgb3IgbXVsdGkgdG91Y2ggZ2VzdHVyZSBsaWtlIHBpbmNoIHRvIHpvb20pXG4gICAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID49IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=