@yoozly/ngx-parallax
Version:
Use parallax effect with Angular 19 compatible universal (standalone and ngModule)
1 lines • 19.4 kB
Source Map (JSON)
{"version":3,"file":"yoozly-ngx-parallax.mjs","sources":["../../../projects/ngx-parallax/src/lib/services/windowref.service.ts","../../../projects/ngx-parallax/src/lib/ngx-parallax.directive.ts","../../../projects/ngx-parallax/src/lib/ngx-parallax.module.ts","../../../projects/ngx-parallax/src/lib/ngx-parallax-standalone.directive.ts","../../../projects/ngx-parallax/src/public_api.ts","../../../projects/ngx-parallax/src/yoozly-ngx-parallax.ts"],"sourcesContent":["import { Injectable, PLATFORM_ID, Inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class BrowserWindowRef {\n constructor(@Inject(PLATFORM_ID) private platformId) {}\n\n get nativeWindow(): any {\n if (isPlatformBrowser(this.platformId)) {\n return this.windowRef();\n }\n return false;\n }\n\n private windowRef(): Window {\n // return the global native browser window object\n return window;\n }\n}\n","import {\n Directive,\n Input,\n ElementRef,\n Renderer2,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { fromEvent, Observable, of, Subject } from 'rxjs';\nimport { takeUntil, filter, map, debounceTime, mergeMap } from 'rxjs/operators';\n\nimport { BrowserWindowRef } from './services/windowref.service';\n\n@Directive({\n selector: '[ngx-parallax]',\n standalone: false\n})\nexport class ParallaxDirective implements OnDestroy, AfterViewInit {\n @Input() speed = 30;\n @Input() axe = 'y';\n @Input() property = 'transform';\n @Input() propertyValue = 'translate3d';\n @Input() active = true;\n\n private inViewport = true;\n private observer: IntersectionObserver;\n private element: HTMLElement;\n private initialPosition: number;\n private componentDestroy$ = new Subject<boolean>();\n private windowScroll$: Observable<number>;\n private windowResize$: Observable<number>;\n\n constructor(\n private hostElement: ElementRef,\n private renderer: Renderer2,\n private wr: BrowserWindowRef\n ) {}\n\n ngAfterViewInit() {\n this.element = this.hostElement.nativeElement;\n\n if (this.element && this.wr.nativeWindow && !this.observer) {\n this.initParallax();\n }\n }\n\n private initParallax(): void {\n this.observer = this.createObserver(0);\n this.observer.observe(this.element);\n\n const parallax$ = of('').pipe(\n takeUntil(this.componentDestroy$),\n filter(() => this.active && this.inViewport),\n map(() => {\n const coef = this.calculateCoef();\n this.renderParallax(coef);\n return coef;\n })\n );\n\n this.windowScroll$ = fromEvent(this.wr.nativeWindow, 'scroll').pipe(\n mergeMap(() => parallax$)\n );\n\n this.windowResize$ = fromEvent(this.wr.nativeWindow, 'resize').pipe(\n debounceTime(500),\n mergeMap(() => parallax$)\n );\n }\n\n private startParallax(): void {\n this.inViewport = true;\n\n if (this.wr.nativeWindow && this.initialPosition === undefined) {\n this.initialPosition = this.wr.nativeWindow.pageYOffset;\n this.windowScroll$.subscribe();\n this.windowResize$.subscribe();\n }\n }\n\n private destroyParallax(): void {\n this.inViewport = false;\n }\n\n private calculateCoef(): number {\n return (\n (this.wr.nativeWindow.pageYOffset - this.initialPosition) *\n (this.speed / 100)\n );\n }\n\n private renderParallax(coef: number): void {\n this.renderer.setStyle(\n this.element,\n this.property,\n this.getPropertyValue(coef)\n );\n }\n\n private getPropertyValue(coef: number): string {\n let result = `${coef}px`;\n\n if (this.property === 'transform') {\n switch (this.propertyValue) {\n case 'translate3d':\n result = `translate3d(${this.getAxe(coef)})`;\n break;\n case 'scale':\n result = `scale(${coef})`;\n break;\n case 'rotate':\n result = `rotate(${coef}deg)`;\n break;\n }\n }\n\n switch (this.property) {\n case 'opacity':\n result = `${coef}`;\n break;\n }\n\n return result;\n }\n\n private getAxe(coef: number): string {\n let axe = [0, coef, 0];\n\n if (this.axe === 'x') {\n axe = [coef, 0, 0];\n } else if (this.axe === 'z') {\n axe = [0, 0, coef];\n }\n\n return `${axe[0]}px, ${axe[1]}px, ${axe[2]}px`;\n }\n\n private createObserver(pourcent: number) {\n const options = {\n rootMargin: '0px',\n threshold: pourcent / 100\n };\n\n const isIntersecting = (entry: IntersectionObserverEntry) =>\n entry.isIntersecting || entry.intersectionRatio > 0;\n\n return new IntersectionObserver((entries, observer) => {\n entries.forEach((entry) => {\n if (isIntersecting(entry)) {\n this.startParallax();\n } else {\n this.destroyParallax();\n }\n });\n }, options);\n }\n\n ngOnDestroy() {\n this.componentDestroy$.next(false);\n this.componentDestroy$.complete();\n if (this.wr.nativeWindow) {\n this.observer.disconnect();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ParallaxDirective } from './ngx-parallax.directive';\n\n@NgModule({\n declarations: [ParallaxDirective],\n imports: [],\n exports: [ParallaxDirective]\n})\nexport class NgxParallaxModule {}\n","import {\n Directive,\n Input,\n ElementRef,\n Renderer2,\n OnDestroy,\n AfterViewInit\n} from '@angular/core';\nimport { fromEvent, Observable, of, Subject } from 'rxjs';\nimport { takeUntil, filter, map, debounceTime, mergeMap } from 'rxjs/operators';\n\nimport { BrowserWindowRef } from './services/windowref.service';\n\n@Directive({\n selector: '[ngx-parallax]',\n standalone: true\n})\nexport class ParallaxStandaloneDirective implements OnDestroy, AfterViewInit {\n @Input() speed = 30;\n @Input() axe = 'y';\n @Input() property = 'transform';\n @Input() propertyValue = 'translate3d';\n @Input() active = true;\n\n private inViewport = true;\n private observer: IntersectionObserver;\n private element: HTMLElement;\n private initialPosition: number;\n private componentDestroy$ = new Subject<boolean>();\n private windowScroll$: Observable<number>;\n private windowResize$: Observable<number>;\n\n constructor(\n private hostElement: ElementRef,\n private renderer: Renderer2,\n private wr: BrowserWindowRef\n ) {}\n\n ngAfterViewInit() {\n this.element = this.hostElement.nativeElement;\n\n if (this.element && this.wr.nativeWindow && !this.observer) {\n this.initParallax();\n }\n }\n\n private initParallax(): void {\n this.observer = this.createObserver(0);\n this.observer.observe(this.element);\n\n const parallax$ = of('').pipe(\n takeUntil(this.componentDestroy$),\n filter(() => this.active && this.inViewport),\n map(() => {\n const coef = this.calculateCoef();\n this.renderParallax(coef);\n return coef;\n })\n );\n\n this.windowScroll$ = fromEvent(this.wr.nativeWindow, 'scroll').pipe(\n mergeMap(() => parallax$)\n );\n\n this.windowResize$ = fromEvent(this.wr.nativeWindow, 'resize').pipe(\n debounceTime(500),\n mergeMap(() => parallax$)\n );\n }\n\n private startParallax(): void {\n this.inViewport = true;\n\n if (this.wr.nativeWindow && this.initialPosition === undefined) {\n this.initialPosition = this.wr.nativeWindow.pageYOffset;\n this.windowScroll$.subscribe();\n this.windowResize$.subscribe();\n }\n }\n\n private destroyParallax(): void {\n this.inViewport = false;\n }\n\n private calculateCoef(): number {\n return (\n (this.wr.nativeWindow.pageYOffset - this.initialPosition) *\n (this.speed / 100)\n );\n }\n\n private renderParallax(coef: number): void {\n this.renderer.setStyle(\n this.element,\n this.property,\n this.getPropertyValue(coef)\n );\n }\n\n private getPropertyValue(coef: number): string {\n let result = `${coef}px`;\n\n if (this.property === 'transform') {\n switch (this.propertyValue) {\n case 'translate3d':\n result = `translate3d(${this.getAxe(coef)})`;\n break;\n case 'scale':\n result = `scale(${coef})`;\n break;\n case 'rotate':\n result = `rotate(${coef}deg)`;\n break;\n }\n }\n\n switch (this.property) {\n case 'opacity':\n result = `${coef}`;\n break;\n }\n\n return result;\n }\n\n private getAxe(coef: number): string {\n let axe = [0, coef, 0];\n\n if (this.axe === 'x') {\n axe = [coef, 0, 0];\n } else if (this.axe === 'z') {\n axe = [0, 0, coef];\n }\n\n return `${axe[0]}px, ${axe[1]}px, ${axe[2]}px`;\n }\n\n private createObserver(pourcent: number) {\n const options = {\n rootMargin: '0px',\n threshold: pourcent / 100\n };\n\n const isIntersecting = (entry: IntersectionObserverEntry) =>\n entry.isIntersecting || entry.intersectionRatio > 0;\n\n return new IntersectionObserver((entries, observer) => {\n entries.forEach((entry) => {\n if (isIntersecting(entry)) {\n this.startParallax();\n } else {\n this.destroyParallax();\n }\n });\n }, options);\n }\n\n ngOnDestroy() {\n this.componentDestroy$.next(false);\n this.componentDestroy$.complete();\n if (this.wr.nativeWindow) {\n this.observer.disconnect();\n }\n }\n}\n","/*\n * Public API Surface of ngx-parallax\n */\n\n// ngModule\nexport * from './lib/ngx-parallax.module';\nexport * from './lib/ngx-parallax.directive';\n\n// standalone\nexport * from './lib/ngx-parallax-standalone.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BrowserWindowRef"],"mappings":"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"}