UNPKG

ng2-parallaxscroll

Version:

A parallax directive for Angular 2+, now with Universal support!

200 lines 15.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, PLATFORM_ID, Inject, Input } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; var ParallaxScrollDirective = /** @class */ (function () { function ParallaxScrollDirective(element, platformId) { var _this = this; this.platformId = platformId; this.axis = 'Y'; this.speed = -.7; this.initialValue = 0; this.cssUnit = 'px'; this.parallaxPivot = '50%'; this.cssProperty = 'backgroundPosition'; this.onScroll = (/** * @return {?} */ function () { /** @type {?} */ var result; /** @type {?} */ var scrollPosition; // Read scroll position * speed + initial val if (_this.testBrowser && _this.scrollElement instanceof Window) { scrollPosition = _this.scrollElement.scrollY * _this.speed + _this.initialValue; } else { scrollPosition = _this.scrollElement.scrollTop * _this.speed + _this.initialValue; } // Set limits if (_this.maxValue !== undefined && scrollPosition >= _this.maxValue) { scrollPosition = _this.maxValue; } else if (_this.minValue !== undefined && scrollPosition <= _this.minValue) { scrollPosition = _this.minValue; } // Get output based on axis if (_this.axis === 'X') { result = 'calc(' + _this.parallaxPivot + ' + ' + scrollPosition + _this.cssUnit + ') center'; } else { result = 'center calc(' + _this.parallaxPivot + ' + ' + scrollPosition + _this.cssUnit + ')'; } _this.parallaxElement.style[(/** @type {?} */ (_this.cssProperty))] = result; }); this.hostElement = element.nativeElement; this.testBrowser = isPlatformBrowser(this.platformId); // If the window exists, grab it, else set to hostElement to prevent errors this.backupElement = this.testBrowser ? window : this.hostElement; } /** * @return {?} */ ParallaxScrollDirective.prototype.ngOnInit = /** * @return {?} */ function () { // Read config for (var prop in this.config) { if (this.config.hasOwnProperty(prop)) { ((/** @type {?} */ (this)))[prop] = ((/** @type {?} */ (this.config)))[prop]; } } this.speed = +this.speed; this.initialValue = +this.initialValue; this.parallaxElement = this.parallaxElement || this.hostElement; // Grab scroll element if (this.scrollerId) { try { this.scrollElement = document.getElementById(this.scrollerId); if (!this.scrollElement) { throw new Error(("ID ('" + this.scrollerId + "') does not exist! Using default")); } } catch (e) { this.scrollElement = this.backupElement; } } else { this.scrollElement = this.backupElement; } this.onScroll(); this.scrollElement.addEventListener('scroll', this.onScroll.bind(this)); }; ParallaxScrollDirective.decorators = [ { type: Directive, args: [{ // tslint:disable-next-line:directive-selector selector: '[parallax]' },] } ]; /** @nocollapse */ ParallaxScrollDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; }; ParallaxScrollDirective.propDecorators = { config: [{ type: Input }], axis: [{ type: Input }], speed: [{ type: Input }], initialValue: [{ type: Input }], maxValue: [{ type: Input }], minValue: [{ type: Input }], cssUnit: [{ type: Input }], scrollerId: [{ type: Input }], parallaxElement: [{ type: Input }], parallaxPivot: [{ type: Input }] }; return ParallaxScrollDirective; }()); export { ParallaxScrollDirective }; if (false) { /** * @type {?} * @private */ ParallaxScrollDirective.prototype.config; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.axis; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.speed; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.initialValue; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.maxValue; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.minValue; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.cssUnit; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.scrollerId; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.parallaxElement; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.parallaxPivot; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.cssProperty; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.scrollElement; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.hostElement; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.backupElement; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.testBrowser; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.onScroll; /** * @type {?} * @private */ ParallaxScrollDirective.prototype.platformId; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLXBhcmFsbGF4c2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nMi1wYXJhbGxheHNjcm9sbC8iLCJzb3VyY2VzIjpbImxpYi9uZzItcGFyYWxsYXhzY3JvbGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRDtJQXVCSSxpQ0FDSSxPQUFtQixFQUVVLFVBQWtCO1FBSG5ELGlCQVFDO1FBTGdDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFuQmxDLFNBQUksR0FBYyxHQUFHLENBQUM7UUFDdEIsVUFBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ1osaUJBQVksR0FBRyxDQUFDLENBQUM7UUFHakIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUdmLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRS9CLGdCQUFXLEdBQUcsb0JBQW9CLENBQUM7UUFnRG5DLGFBQVE7OztRQUFHOztnQkFDWCxNQUFjOztnQkFDZCxjQUFzQjtZQUUxQiw2Q0FBNkM7WUFDN0MsSUFBSSxLQUFJLENBQUMsV0FBVyxJQUFJLEtBQUksQ0FBQyxhQUFhLFlBQVksTUFBTSxFQUFFO2dCQUMxRCxjQUFjLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILGNBQWMsR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUM7YUFDbEY7WUFFRCxhQUFhO1lBQ2IsSUFBSSxLQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxjQUFjLElB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QyxXQUFXOzs7eUJBcEJ0QixLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzsrQkFDTCxLQUFLOzJCQUNMLEtBQUs7MkJBQ0wsS0FBSzswQkFDTCxLQUFLOzZCQUNMLEtBQUs7a0NBQ0wsS0FBSztnQ0FDTCxLQUFLOztJQTZFViw4QkFBQztDQUFBLEFBNUZELElBNEZDO1NBeEZZLHVCQUF1Qjs7Ozs7O0lBRWhDLHlDQUErQzs7Ozs7SUFDL0MsdUNBQXVDOzs7OztJQUN2Qyx3Q0FBNkI7Ozs7O0lBQzdCLCtDQUFrQzs7Ozs7SUFDbEMsMkNBQWtDOzs7OztJQUNsQywyQ0FBa0M7Ozs7O0lBQ2xDLDBDQUFnQzs7Ozs7SUFDaEMsNkNBQW9DOzs7OztJQUNwQyxrREFBOEM7Ozs7O0lBQzlDLGdEQUF1Qzs7Ozs7SUFFdkMsOENBQTJDOzs7OztJQUMzQyxnREFBMkI7Ozs7O0lBQzNCLDhDQUFpQzs7Ozs7SUFDakMsZ0RBQTJCOzs7OztJQUMzQiw4Q0FBNkI7Ozs7O0lBNEM3QiwyQ0EwQkM7Ozs7O0lBakVHLDZDQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQYXJhbGxheFNjcm9sbENvbmZpZyB9IGZyb20gJy4vbmcyLXBhcmFsbGF4c2Nyb2xsJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUExBVEZPUk1fSUQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbcGFyYWxsYXhdJ1xufSlcbmV4cG9ydCBjbGFzcyBQYXJhbGxheFNjcm9sbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBwcml2YXRlIGNvbmZpZzogSVBhcmFsbGF4U2Nyb2xsQ29uZmlnO1xuICAgIEBJbnB1dCgpIHByaXZhdGUgYXhpczogJ1gnIHwgJ1knID0gJ1knO1xuICAgIEBJbnB1dCgpIHByaXZhdGUgc3BlZWQgPSAtLjc7XG4gICAgQElucHV0KCkgcHJpdmF0ZSBpbml0aWFsVmFsdWUgPSAwO1xuICAgIEBJbnB1dCgpIHByaXZhdGUgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwcml2YXRlIG1pblZhbHVlOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHJpdmF0ZSBjc3NVbml0ID0gJ3B4JztcbiAgICBASW5wdXQoKSBwcml2YXRlIHNjcm9sbGVySWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwcml2YXRlIHBhcmFsbGF4RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgcHJpdmF0ZSBwYXJhbGxheFBpdm90ID0gJzUwJSc7XG5cbiAgICBwcml2YXRlIGNzc1Byb3BlcnR5ID0gJ2JhY2tncm91bmRQb3NpdGlvbic7XG4gICAgcHJpdmF0ZSBzY3JvbGxFbGVtZW50OiBhbnk7XG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBiYWNrdXBFbGVtZW50OiBhbnk7XG4gICAgcHJpdmF0ZSB0ZXN0QnJvd3NlcjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLXR5cGVzXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMudGVzdEJyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICAgICAgICAvLyBJZiB0aGUgd2luZG93IGV4aXN0cywgZ3JhYiBpdCwgZWxzZSBzZXQgdG8gaG9zdEVsZW1lbnQgdG8gcHJldmVudCBlcnJvcnNcbiAgICAgICAgdGhpcy5iYWNrdXBFbGVtZW50ID0gdGhpcy50ZXN0QnJvd3NlciA/IHdpbmRvdyA6IHRoaXMuaG9zdEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBSZWFkIGNvbmZpZ1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSlbcHJvcF0gPSAodGhpcy5jb25maWcgYXMgYW55KVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3BlZWQgPSArdGhpcy5zcGVlZDtcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSArdGhpcy5pbml0aWFsVmFsdWU7XG5cbiAgICAgICAgdGhpcy5wYXJhbGxheEVsZW1lbnQgPSB0aGlzLnBhcmFsbGF4RWxlbWVudCB8fCB0aGlzLmhvc3RFbGVtZW50O1xuXG4gICAgICAgIC8vIEdyYWIgc2Nyb2xsIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsZXJJZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNjcm9sbGVySWQpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY3JvbGxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoYElEICgnJHt0aGlzLnNjcm9sbGVySWR9JykgZG9lcyBub3QgZXhpc3QhIFVzaW5nIGRlZmF1bHRgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudCA9IHRoaXMuYmFja3VwRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudCA9IHRoaXMuYmFja3VwRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25TY3JvbGwoKTtcblxuICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XG4gICAgICAgIGxldCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyO1xuXG4gICAgICAgIC8vIFJlYWQgc2Nyb2xsIHBvc2l0aW9uICogc3BlZWQgKyBpbml0aWFsIHZhbFxuICAgICAgICBpZiAodGhpcy50ZXN0QnJvd3NlciAmJiB0aGlzLnNjcm9sbEVsZW1lbnQgaW5zdGFuY2VvZiBXaW5kb3cpIHtcbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gdGhpcy5zY3JvbGxFbGVtZW50LnNjcm9sbFkgKiB0aGlzLnNwZWVkICsgdGhpcy5pbml0aWFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgKiB0aGlzLnNwZWVkICsgdGhpcy5pbml0aWFsVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgbGltaXRzXG4gICAgICAgIGlmICh0aGlzLm1heFZhbHVlICE9PSB1bmRlZmluZWQgJiYgc2Nyb2xsUG9zaXRpb24gPj0gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLm1heFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWluVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzY3JvbGxQb3NpdGlvbiA8PSB0aGlzLm1pblZhbHVlKSB7XG4gICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgb3V0cHV0IGJhc2VkIG9uIGF4aXNcbiAgICAgICAgaWYgKHRoaXMuYXhpcyA9PT0gJ1gnKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAnY2FsYygnICsgdGhpcy5wYXJhbGxheFBpdm90ICsgJyArICcgKyBzY3JvbGxQb3NpdGlvbiArIHRoaXMuY3NzVW5pdCArICcpIGNlbnRlcic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSAnY2VudGVyIGNhbGMoJyArIHRoaXMucGFyYWxsYXhQaXZvdCArICcgKyAnICsgc2Nyb2xsUG9zaXRpb24gKyB0aGlzLmNzc1VuaXQgKyAnKSc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhcmFsbGF4RWxlbWVudC5zdHlsZVt0aGlzLmNzc1Byb3BlcnR5IGFzIGFueV0gPSByZXN1bHQ7XG4gICAgfVxufVxuIl19