Optimize Brand Accent Component
This commit is contained in:
1 parent
f610849c17
commit
9fbd2db197
1 file changed
+19
-6
@@ -21,13 +21,15 @@ import { SettingsService } from '../../services/settings.service';
|
||||
export class BrandAccent implements OnDestroy {
|
||||
@ViewChild('canvasElement') canvasRef!: ElementRef<HTMLCanvasElement>;
|
||||
private ctx!: CanvasRenderingContext2D;
|
||||
private resizeObserver?: ResizeObserver;
|
||||
private settingsService = inject(SettingsService);
|
||||
|
||||
private canvasNativeSize: [number, number] = [0, 0];
|
||||
private bgGradient!: CanvasGradient;
|
||||
private gridGradient!: CanvasGradient;
|
||||
|
||||
private resizeObserver?: ResizeObserver;
|
||||
private intersectionObserver?: IntersectionObserver;
|
||||
|
||||
private animation: {
|
||||
id?: number;
|
||||
startTime: number;
|
||||
@@ -61,11 +63,23 @@ export class BrandAccent implements OnDestroy {
|
||||
this.resizeObserver = new ResizeObserver(() => this.resize());
|
||||
this.resizeObserver.observe(this.canvasRef.nativeElement);
|
||||
|
||||
this.intersectionObserver = new IntersectionObserver(
|
||||
(entries) => {
|
||||
if (entries[0].isIntersecting) {
|
||||
if (!this.animation.id) this.animate(performance.now());
|
||||
} else if (this.animation.id) {
|
||||
cancelAnimationFrame(this.animation.id);
|
||||
this.animation.id = undefined;
|
||||
}
|
||||
}, { rootMargin: '200px' }
|
||||
);
|
||||
this.intersectionObserver.observe(this.canvasRef.nativeElement);
|
||||
|
||||
this.resize(); // Safe Initialization
|
||||
this.animation.startTime = performance.now();
|
||||
this.draw();
|
||||
|
||||
this.animate(performance.now());
|
||||
this.draw();
|
||||
// this.animate(performance.now());
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -219,9 +233,8 @@ export class BrandAccent implements OnDestroy {
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
if (this.animation.id) {
|
||||
cancelAnimationFrame(this.animation.id);
|
||||
}
|
||||
if (this.animation.id) cancelAnimationFrame(this.animation.id);
|
||||
this.resizeObserver?.disconnect();
|
||||
this.intersectionObserver?.disconnect();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user