From 193649bc2dd7ceb15759494ed90374c976ea51d9 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 10 Jun 2025 00:53:51 -0700 Subject: [PATCH] Add basic interactive headers --- src/routes/work/[slug]/+page.svelte | 194 ++++++++++++++++++++-------- 1 file changed, 140 insertions(+), 54 deletions(-) diff --git a/src/routes/work/[slug]/+page.svelte b/src/routes/work/[slug]/+page.svelte index b3ba711..ab7a6db 100644 --- a/src/routes/work/[slug]/+page.svelte +++ b/src/routes/work/[slug]/+page.svelte @@ -9,6 +9,30 @@ const project = $derived(data.project as Project | null) const error = $derived(data.error as string | undefined) + + let headerContainer = $state(null) + let logoTransform = $state('translate(0, 0)') + + function handleMouseMove(e: MouseEvent) { + if (!headerContainer) return + + const rect = headerContainer.getBoundingClientRect() + const x = e.clientX - rect.left + const y = e.clientY - rect.top + + const centerX = rect.width / 2 + const centerY = rect.height / 2 + + // Calculate movement based on mouse position relative to center + const moveX = ((x - centerX) / centerX) * 15 // 15px max movement + const moveY = ((y - centerY) / centerY) * 15 + + logoTransform = `translate(${moveX}px, ${moveY}px)` + } + + function handleMouseLeave() { + logoTransform = 'translate(0, 0)' + } {#if error} @@ -36,46 +60,69 @@ {:else if project.status === 'password-protected'} - - +
- {#snippet children()} -
- {#if project.logoUrl} - - {/if} -

{project.title}

- {#if project.subtitle} -

{project.subtitle}

- {/if} -
- - {/snippet} - - -{:else} - -
{#if project.logoUrl} - - {/if} -

{project.title}

- {#if project.subtitle} -

{project.subtitle}

+ {/if}
- -
+ + + {#snippet children()} +
+

{project.title}

+ {#if project.subtitle} +

{project.subtitle}

+ {/if} +
+ + {/snippet} +
+
+
+{:else} +
+
+ {#if project.logoUrl} + + {/if} +
+ +
+

{project.title}

+ {#if project.subtitle} +

{project.subtitle}

+ {/if} +
+ +
+
{/if}