@omnedia/ngx-starry-sky
Version:
A simple component library to create a container with an animated background.
1 lines • 21 kB
Source Map (JSON)
{"version":3,"file":"omnedia-ngx-starry-sky.mjs","sources":["../../../projects/ngx-starry-sky/src/lib/ngx-starry-sky.component.ts","../../../projects/ngx-starry-sky/src/lib/ngx-starry-sky.component.html","../../../projects/ngx-starry-sky/src/public-api.ts","../../../projects/ngx-starry-sky/src/omnedia-ngx-starry-sky.ts"],"sourcesContent":["import {CommonModule, isPlatformBrowser} from \"@angular/common\";\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n PLATFORM_ID,\r\n signal,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {ShootingStar, ShootingStarsProps, StarBackgroundProps, StarProps,} from \"./ngx-starry-sky.types\";\r\n\r\n@Component({\r\n selector: \"om-starry-sky\",\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: \"./ngx-starry-sky.component.html\",\r\n styleUrl: \"./ngx-starry-sky.component.scss\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxStarrySkyComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild(\"OmStarrySkyCanvas\")\r\n canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n @ViewChild(\"OmStarrySkySvg\")\r\n svgRef!: ElementRef<HTMLOrSVGElement>;\r\n\r\n @ViewChild(\"OmStarrySkyWrapper\")\r\n wrapperRef!: ElementRef<HTMLElement>;\r\n\r\n @Input(\"styleClass\")\r\n styleClass?: string;\r\n\r\n @Input(\"disableShootingStars\")\r\n disableShootingStars = false;\r\n\r\n @Input(\"skyColor\")\r\n set skyColor(color: string) {\r\n this.style[\"--om-starry-sky-color\"] = color;\r\n }\r\n\r\n @Input(\"starsBackgroundConfig\")\r\n set starsBackgroundPropsValue(props: StarBackgroundProps) {\r\n this.starsBackgroundProps = {...this.starsBackgroundProps, ...props};\r\n }\r\n\r\n private starsBackgroundProps: StarBackgroundProps = {\r\n starDensity: 0.00015,\r\n allStarsTwinkle: true,\r\n twinkleProbability: 0.7,\r\n minTwinkleSpeed: 0.5,\r\n maxTwinkleSpeed: 1,\r\n };\r\n\r\n @Input(\"shootingStarsConfig\")\r\n set shootingStarsPropsValue(props: ShootingStarsProps) {\r\n this.shootingStarsProps = {...this.shootingStarsProps, ...props};\r\n }\r\n\r\n shootingStarsProps: ShootingStarsProps = {\r\n minSpeed: 10,\r\n maxSpeed: 30,\r\n minDelay: 1200,\r\n maxDelay: 4200,\r\n starColor: \"#cd8ef8\",\r\n trailColor: \"#80dffa\",\r\n starWidth: 10,\r\n starHeight: 1,\r\n };\r\n\r\n shootingStar = signal<ShootingStar | undefined>(undefined);\r\n\r\n style: any = {};\r\n\r\n private stars: StarProps[] = [];\r\n\r\n private isInView = signal(false);\r\n private isAnimating = signal(false);\r\n private animationFrameIdSky?: number;\r\n private animationFrameIdShootingStar?: number;\r\n private intersectionObserver?: IntersectionObserver;\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platformId: object\r\n ) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initStarSky();\r\n this.initShootingStars();\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.intersectionObserver = new IntersectionObserver(([entry]) => {\r\n this.renderContents(entry.isIntersecting);\r\n });\r\n this.intersectionObserver.observe(this.canvasRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n window.removeEventListener(\"resize\", () => this.setCanvasSize());\r\n\r\n if (this.intersectionObserver) {\r\n this.intersectionObserver.disconnect();\r\n }\r\n\r\n if (this.animationFrameIdSky) {\r\n cancelAnimationFrame(this.animationFrameIdSky);\r\n }\r\n\r\n if (this.animationFrameIdShootingStar) {\r\n cancelAnimationFrame(this.animationFrameIdShootingStar);\r\n }\r\n }\r\n\r\n renderContents(isIntersecting: boolean) {\r\n if (isIntersecting && !this.isInView()) {\r\n this.isInView.set(true);\r\n\r\n if (!this.isAnimating()) {\r\n this.animationFrameIdSky = requestAnimationFrame(() =>\r\n this.renderStarSky()\r\n );\r\n this.animationFrameIdShootingStar = requestAnimationFrame(() =>\r\n this.moveShootingStar()\r\n );\r\n }\r\n } else if (!isIntersecting) {\r\n this.isInView.set(false);\r\n }\r\n }\r\n\r\n private initStarSky(): void {\r\n window.addEventListener(\"resize\", () => this.setCanvasSize());\r\n\r\n this.setCanvasSize();\r\n this.updateStars();\r\n this.renderStarSky();\r\n }\r\n\r\n private initShootingStars(): void {\r\n if (this.disableShootingStars) {\r\n return;\r\n }\r\n\r\n this.createShootingStar();\r\n this.moveShootingStar();\r\n }\r\n\r\n private renderStarSky(): void {\r\n if (!this.isInView()) {\r\n this.isAnimating.set(false);\r\n return;\r\n }\r\n\r\n this.isAnimating.set(true);\r\n\r\n const context = this.canvasRef.nativeElement.getContext(\"2d\");\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n context.clearRect(\r\n 0,\r\n 0,\r\n this.canvasRef.nativeElement.width,\r\n this.canvasRef.nativeElement.height\r\n );\r\n\r\n this.stars.forEach((star) => {\r\n context.beginPath();\r\n context.arc(star.x, star.y, star.radius, 0, Math.PI * 2);\r\n context.fillStyle = `rgba(255, 255, 255, ${star.opacity})`;\r\n context.fill();\r\n\r\n if (star.twinkleSpeed !== null) {\r\n star.opacity =\r\n 0.5 +\r\n Math.abs(Math.sin((Date.now() * 0.001) / star.twinkleSpeed) * 0.5);\r\n }\r\n });\r\n\r\n this.animationFrameIdSky = requestAnimationFrame(() =>\r\n this.renderStarSky()\r\n );\r\n }\r\n\r\n private updateStars(): void {\r\n const context = this.canvasRef.nativeElement.getContext(\"2d\");\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n const {width, height} =\r\n this.wrapperRef.nativeElement.getBoundingClientRect();\r\n\r\n this.stars = this.generateStars(width, height);\r\n }\r\n\r\n private generateStars(width: number, height: number): StarProps[] {\r\n const area = width * height;\r\n const numStars = Math.floor(\r\n area * (this.starsBackgroundProps.starDensity ?? 0.00015)\r\n );\r\n return Array.from({length: numStars}, () => {\r\n const shouldTwinkle =\r\n this.starsBackgroundProps.allStarsTwinkle ||\r\n Math.random() < (this.starsBackgroundProps.twinkleProbability ?? 0.7);\r\n\r\n return {\r\n x: Math.random() * width,\r\n y: Math.random() * height,\r\n radius: Math.random() * 0.05 + 0.5,\r\n opacity: Math.random() * 0.5 + 0.5,\r\n twinkleSpeed: shouldTwinkle\r\n ? (this.starsBackgroundProps.minTwinkleSpeed ?? 0.5) +\r\n Math.random() *\r\n ((this.starsBackgroundProps.maxTwinkleSpeed ?? 1) -\r\n (this.starsBackgroundProps.minTwinkleSpeed ?? 0.5))\r\n : null,\r\n };\r\n });\r\n }\r\n\r\n private setCanvasSize(): void {\r\n this.canvasRef.nativeElement.width =\r\n this.wrapperRef.nativeElement.getBoundingClientRect().width;\r\n this.canvasRef.nativeElement.height =\r\n this.wrapperRef.nativeElement.getBoundingClientRect().height;\r\n }\r\n\r\n private createShootingStar(): void {\r\n if (this.disableShootingStars) {\r\n return;\r\n }\r\n\r\n const {x, y, angle} = this.getRandomStartPoint();\r\n\r\n const shootingStar = {\r\n id: Date.now(),\r\n x,\r\n y,\r\n angle,\r\n scale: 1,\r\n speed:\r\n Math.random() *\r\n ((this.shootingStarsProps.maxSpeed ?? 30) -\r\n (this.shootingStarsProps.minSpeed ?? 10)) +\r\n (this.shootingStarsProps.minSpeed ?? 10),\r\n distance: 0,\r\n };\r\n\r\n this.shootingStar.set(shootingStar);\r\n\r\n const randomDelay =\r\n Math.random() *\r\n ((this.shootingStarsProps.maxDelay ?? 4200) -\r\n (this.shootingStarsProps.minDelay ?? 1200)) +\r\n (this.shootingStarsProps.minDelay ?? 1200);\r\n\r\n setTimeout(() => this.createShootingStar(), randomDelay);\r\n }\r\n\r\n private moveShootingStar(): void {\r\n if (this.disableShootingStars) {\r\n return;\r\n }\r\n\r\n if (!this.isInView()) {\r\n this.isAnimating.set(false);\r\n return;\r\n }\r\n\r\n this.isAnimating.set(true);\r\n\r\n this.animationFrameIdShootingStar = requestAnimationFrame(() =>\r\n this.moveShootingStar()\r\n );\r\n\r\n if (!this.shootingStar()) {\r\n return;\r\n }\r\n\r\n const prevStar = Object.assign({}, this.shootingStar());\r\n\r\n const newX =\r\n prevStar.x + prevStar.speed * Math.cos((prevStar.angle * Math.PI) / 180);\r\n const newY =\r\n prevStar.y + prevStar.speed * Math.sin((prevStar.angle * Math.PI) / 180);\r\n const newDistance = prevStar.distance + prevStar.speed;\r\n const newScale = 1 + newDistance / 100;\r\n\r\n if (\r\n newX < -20 ||\r\n newX > this.wrapperRef.nativeElement.offsetWidth + 20 ||\r\n newY < -20 ||\r\n newY > this.wrapperRef.nativeElement.offsetHeight + 20\r\n ) {\r\n this.shootingStar.set(undefined);\r\n return;\r\n }\r\n\r\n prevStar.x = newX;\r\n prevStar.y = newY;\r\n prevStar.distance = newDistance;\r\n prevStar.scale = newScale;\r\n\r\n this.shootingStar.set(prevStar);\r\n }\r\n\r\n private getRandomStartPoint(): { x: number; y: number; angle: number } {\r\n const side = Math.floor(Math.random() * 4);\r\n const offset = Math.random() * this.wrapperRef.nativeElement.offsetWidth;\r\n\r\n switch (side) {\r\n case 0:\r\n return {x: offset, y: 0, angle: 45};\r\n case 1:\r\n return {x: this.wrapperRef.nativeElement.offsetWidth, y: offset, angle: 135};\r\n case 2:\r\n return {x: offset, y: this.wrapperRef.nativeElement.offsetHeight, angle: 225};\r\n case 3:\r\n return {x: 0, y: offset, angle: 315};\r\n default:\r\n return {x: 0, y: 0, angle: 45};\r\n }\r\n }\r\n}\r\n","<div class=\"om-starry-sky\" [ngStyle]=\"style\" [ngClass]=\"styleClass\" #OmStarrySkyWrapper>\r\n <div class=\"om-starry-sky-background\">\r\n <svg #OmStarrySkySvg>\r\n @if (shootingStar(); as star) {\r\n <rect [attr.key]=\"star.id\" [attr.x]=\"star.x\" [attr.y]=\"star.y\"\r\n [attr.width]=\"(shootingStarsProps.starWidth ?? 1) * (star.scale)\"\r\n [attr.height]=\"shootingStarsProps.starHeight ?? 10\" [attr.fill]=\"'url(#gradient)'\"\r\n [attr.transform]=\"'rotate(' + star.angle + ', ' + (star.x + (shootingStarsProps.starWidth ?? 1) * star.scale / 2) + ', ' + (star.y + (shootingStarsProps.starHeight ?? 10) / 2) + ')'\">\r\n </rect>\r\n <defs>\r\n <linearGradient id=\"gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\r\n <stop offset=\"0%\" [style.stopColor]=\"shootingStarsProps.trailColor\" [style.stopOpacity]=\"'0'\"/>\r\n <stop offset=\"100%\" [style.stopColor]=\"shootingStarsProps.starColor\" [style.stopOpacity]=\"'1'\"/>\r\n </linearGradient>\r\n </defs>\r\n }\r\n </svg>\r\n <canvas #OmStarrySkyCanvas></canvas>\r\n </div>\r\n\r\n <ng-content></ng-content>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-starry-sky\r\n */\r\n\r\nexport * from \"./lib/ngx-starry-sky.component\";\r\nexport * from \"./lib/ngx-starry-sky.types\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}