ng2-parallaxscroll
Version:
A parallax directive for Angular 2+, now with Universal support!
200 lines • 15.2 kB
JavaScript
/**
* @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