UNPKG

rfx-parallax

Version:
104 lines 14.6 kB
import { Directive, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../services"; export class WillChangeDirective { constructor(htmlElement, renderer, scrollEventService) { this.htmlElement = htmlElement; this.renderer = renderer; this.scrollEventService = scrollEventService; this.triggerArea = typeof window !== 'undefined' ? window.innerHeight / 4 * 6 : 0; this.isDisabled = false; this.willChange = true; } ngOnInit() { if (!this.isDisabled) { this.willChangeArea = this.getWillChangeArea(); this.createListener(); } } ngOnDestroy() { this.destroyListener(); } /** * Create listener for scroll event. */ createListener() { this.scrollEventListener = this.scrollEventService.getMouseScroll().subscribe((scroll) => this.checkWillChange(scroll)); } /** * Destroy scroll event listener. */ destroyListener() { this.scrollEventListener?.unsubscribe(); } /** * Refresh will-change area if some properties changed. * @param {SimpleChanges} changes - Changes. */ ngOnChanges(changes) { if (changes['isDisabled'] && (changes['isDisabled'].currentValue !== undefined) && !changes['isDisabled'].firstChange) { this.destroyListener(); return; } if (changes['triggerArea'] && (changes['triggerArea'].currentValue !== undefined) && !changes['triggerArea'].firstChange && !this.isDisabled) { const scroll = this.scrollEventService.getMouseScrollValue(); this.willChangeArea = this.getWillChangeArea(); this.checkWillChange(scroll); } } /** * Check will-change property and * update if needed. * @param {number} scroll - Scroll position. */ checkWillChange(scroll) { if (this.willChangeArea) { const isElementInArea = this.isElementInArea(scroll, this.willChangeArea); if (isElementInArea !== this.willChange) { this.setWillChange(isElementInArea); } } } /** * Check if element is in will-change area. * @param {number} scroll - Scroll position. * @param {SectionAreaModel} willChangeArea - Will-change area. * @returns {boolean} - Is element in will-change area. */ isElementInArea(scroll, willChangeArea) { return scroll >= willChangeArea.top && scroll <= willChangeArea.bottom; } /** * Calculate area where element is probably going to be animated soon. * @returns {number} - Will-change area. */ getWillChangeArea() { const elementRect = this.htmlElement.nativeElement.getBoundingClientRect(); const scroll = this.scrollEventService.getMouseScrollValue(); const elementTop = elementRect.top + scroll; const areaTop = elementTop - this.triggerArea; const areaBottom = elementTop + this.triggerArea; return { top: areaTop, bottom: areaBottom }; } /** * Set element will-change property. * @param {boolean} willChange - will-change enabled or disabled. */ setWillChange(willChange) { this.willChange = willChange; this.renderer.setStyle(this.htmlElement.nativeElement, 'will-change', willChange ? 'transform' : 'auto'); } } WillChangeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WillChangeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ScrollEventService }], target: i0.ɵɵFactoryTarget.Directive }); WillChangeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: WillChangeDirective, selector: "[libWillChange]", inputs: { triggerArea: "triggerArea", isDisabled: "isDisabled" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WillChangeDirective, decorators: [{ type: Directive, args: [{ selector: '[libWillChange]' }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ScrollEventService }]; }, propDecorators: { triggerArea: [{ type: Input }], isDisabled: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lsbC1jaGFuZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmZ4LXBhcmFsbGF4L3NyYy9saWIvZGlyZWN0aXZlcy93aWxsLWNoYW5nZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQTBELE1BQU0sZUFBZSxDQUFDOzs7QUFRckgsTUFBTSxPQUFPLG1CQUFtQjtJQW9DOUIsWUFDVSxXQUF1QixFQUN2QixRQUFtQixFQUNuQixrQkFBc0M7UUFGdEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBRTlDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQzNFLENBQUMsTUFBYyxFQUFFLEVB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ZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNjcm9sbEV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU2VjdGlvbkFyZWFNb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbGliV2lsbENoYW5nZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXaWxsQ2hhbmdlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogQXJlYSB3aGVyZSBlbGVtZW50IGhhcyB3aWxsLWNoYW5nZSBwcm9wZXJ0eS5cclxuICAgKiBEZWZhdWx0IGlzIHdpbmRvdyBoZWlnaHQgLyA0ICogNi5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHRyaWdnZXJBcmVhOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpc2FibGVkLCBlbGVtZW50IHdpbGwgaGF2ZSB3aWxsLWNoYW5nZVxyXG4gICAqIHByb3BlcnR5IHNldCB0byAnYXV0bycuXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmFuZ2UgaW4gcGl4ZWxzIHdoZXJlIHRoZSBlbGVtZW50IGhhc1xyXG4gICAqIHdpbGwtY2hhbmdlIHByb3BlcnR5LlxyXG4gICAqIEB0eXBlIHtTZWN0aW9uQXJlYU1vZGVsIHwgdW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgd2lsbENoYW5nZUFyZWE6IFNlY3Rpb25BcmVhTW9kZWwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVsZW1lbnQgd2lsbCBjaGFuZ2UgdmFsdWUuXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcHJpdmF0ZSB3aWxsQ2hhbmdlOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gc2Nyb2xsIGV2ZW50LlxyXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb24gfCB1bmRlZmluZWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzY3JvbGxFdmVudExpc3RlbmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodG1sRWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgc2Nyb2xsRXZlbnRTZXJ2aWNlOiBTY3JvbGxFdmVudFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMudHJpZ2dlckFyZWEgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lckhlaWdodCAvIDQgKiA2IDogMDtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy53aWxsQ2hhbmdlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMud2lsbENoYW5nZUFyZWEgPSB0aGlzLmdldFdpbGxDaGFuZ2VBcmVhKCk7XHJcbiAgICAgIHRoaXMuY3JlYXRlTGlzdGVuZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveUxpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgbGlzdGVuZXIgZm9yIHNjcm9sbCBldmVudC5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUxpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JvbGxFdmVudExpc3RlbmVyID0gdGhpcy5zY3JvbGxFdmVudFNlcnZpY2UuZ2V0TW91c2VTY3JvbGwoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChzY3JvbGw6IG51bWJlcikgPT4gdGhpcy5jaGVja1dpbGxDaGFuZ2Uoc2Nyb2xsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryb3kgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVzdHJveUxpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JvbGxFdmVudExpc3RlbmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVmcmVzaCB3aWxsLWNoYW5nZSBhcmVhIGlmIHNvbWUgcHJvcGVydGllcyBjaGFuZ2VkLlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlcyAtIENoYW5nZXMuXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydpc0Rpc2FibGVkJ10gJiYgKGNoYW5nZXNbJ2lzRGlzYWJsZWQnXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkgJiYgIWNoYW5nZXNbJ2lzRGlzYWJsZWQnXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3RyaWdnZXJBcmVhJ10gJiYgKGNoYW5nZXNbJ3RyaWdnZXJBcmVhJ10uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpICYmICFjaGFuZ2VzWyd0cmlnZ2VyQXJlYSddLmZpcnN0Q2hhbmdlICYmICF0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsOiBudW1iZXIgPSB0aGlzLnNjcm9sbEV2ZW50U2VydmljZS5nZXRNb3VzZVNjcm9sbFZhbHVlKCk7XHJcbiAgICAgIHRoaXMud2lsbENoYW5nZUFyZWEgPSB0aGlzLmdldFdpbGxDaGFuZ2VBcmVhKCk7XHJcbiAgICAgIHRoaXMuY2hlY2tXaWxsQ2hhbmdlKHNjcm9sbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB3aWxsLWNoYW5nZSBwcm9wZXJ0eSBhbmRcclxuICAgKiB1cGRhdGUgaWYgbmVlZGVkLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGwgLSBTY3JvbGwgcG9zaXRpb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja1dpbGxDaGFuZ2Uoc2Nyb2xsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndpbGxDaGFuZ2VBcmVhKSB7XHJcbiAgICAgIGNvbnN0IGlzRWxlbWVudEluQXJlYTogYm9vbGVhbiA9IHRoaXMuaXNFbGVtZW50SW5BcmVhKHNjcm9sbCwgdGhpcy53aWxsQ2hhbmdlQXJlYSk7XHJcblxyXG4gICAgICBpZiAoaXNFbGVtZW50SW5BcmVhICE9PSB0aGlzLndpbGxDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNldFdpbGxDaGFuZ2UoaXNFbGVtZW50SW5BcmVhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgZWxlbWVudCBpcyBpbiB3aWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGwgLSBTY3JvbGwgcG9zaXRpb24uXHJcbiAgICogQHBhcmFtIHtTZWN0aW9uQXJlYU1vZGVsfSB3aWxsQ2hhbmdlQXJlYSAtIFdpbGwtY2hhbmdlIGFyZWEuXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gSXMgZWxlbWVudCBpbiB3aWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNFbGVtZW50SW5BcmVhKHNjcm9sbDogbnVtYmVyLCB3aWxsQ2hhbmdlQXJlYTogU2VjdGlvbkFyZWFNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHNjcm9sbCA+PSB3aWxsQ2hhbmdlQXJlYS50b3AgJiYgc2Nyb2xsIDw9IHdpbGxDaGFuZ2VBcmVhLmJvdHRvbTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSBhcmVhIHdoZXJlIGVsZW1lbnQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW5pbWF0ZWQgc29vbi5cclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdpbGwtY2hhbmdlIGFyZWEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRXaWxsQ2hhbmdlQXJlYSgpOiBTZWN0aW9uQXJlYU1vZGVsIHtcclxuICAgIGNvbnN0IGVsZW1lbnRSZWN0OiBET01SZWN0ID0gdGhpcy5odG1sRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3Qgc2Nyb2xsOiBudW1iZXIgPSB0aGlzLnNjcm9sbEV2ZW50U2VydmljZS5nZXRNb3VzZVNjcm9sbFZhbHVlKCk7XHJcbiAgICBjb25zdCBlbGVtZW50VG9wOiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3AgKyBzY3JvbGw7XHJcbiAgICBjb25zdCBhcmVhVG9wOiBudW1iZXIgPSBlbGVtZW50VG9wIC0gdGhpcy50cmlnZ2VyQXJlYTtcclxuICAgIGNvbnN0IGFyZWFCb3R0b206IG51bWJlciA9IGVsZW1lbnRUb3AgKyB0aGlzLnRyaWdnZXJBcmVhO1xyXG4gICAgcmV0dXJuIHsgdG9wOiBhcmVhVG9wLCBib3R0b206IGFyZWFCb3R0b20gfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBlbGVtZW50IHdpbGwtY2hhbmdlIHByb3BlcnR5LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gd2lsbENoYW5nZSAtIHdpbGwtY2hhbmdlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRXaWxsQ2hhbmdlKHdpbGxDaGFuZ2U6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMud2lsbENoYW5nZSA9IHdpbGxDaGFuZ2U7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICd3aWxsLWNoYW5nZScsXHJcbiAgICAgIHdpbGxDaGFuZ2UgPyAndHJhbnNmb3JtJyA6ICdhdXRvJ1xyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19