feat: add fade-in transition for dots canvas background

This commit is contained in:
2026-01-06 01:13:30 -06:00
parent 3c6f61c4e4
commit 5fc7277cd7
+16 -1
View File
@@ -37,6 +37,7 @@
let canvas: HTMLCanvasElement; let canvas: HTMLCanvasElement;
let cleanupFns: (() => void)[] = []; let cleanupFns: (() => void)[] = [];
let ready = $state(false);
function addCleanup(fn: () => void) { function addCleanup(fn: () => void) {
cleanupFns.push(fn); cleanupFns.push(fn);
@@ -363,6 +364,7 @@
const startTime = Date.now(); const startTime = Date.now();
let animationId: number; let animationId: number;
let firstFrameRendered = false;
function render() { function render() {
if (document.hidden) { if (document.hidden) {
@@ -379,6 +381,15 @@
gl.clear(gl.COLOR_BUFFER_BIT); gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6); gl.drawArrays(gl.TRIANGLES, 0, 6);
if (!firstFrameRendered) {
firstFrameRendered = true;
requestAnimationFrame(() => {
requestAnimationFrame(() => {
ready = true;
});
});
}
animationId = requestAnimationFrame(render); animationId = requestAnimationFrame(render);
} }
@@ -395,5 +406,9 @@
<canvas <canvas
bind:this={canvas} bind:this={canvas}
class={cn("pointer-events-none fixed inset-0 -z-10", className)} class={cn(
"pointer-events-none fixed inset-0 -z-10 transition-opacity duration-1300 ease-out",
ready ? "opacity-100" : "opacity-0",
className,
)}
></canvas> ></canvas>