diff --git a/src/App.svelte b/src/App.svelte index 6c6d110..4967b2f 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -38,11 +38,10 @@ let resizeTimer = null // Active la transition seulement après le premier paint à la bonne position. - // Double rAF : le premier laisse passer un paint avec le bon translateX, - // le second active is-animated — évite l'animation parasite au chargement. + // Sans ça, un chargement sur /expertise slide depuis l'accueil. $effect(() => { if (slides.all.length > 0 && !isReady) { - requestAnimationFrame(() => requestAnimationFrame(() => { isReady = true })) + requestAnimationFrame(() => { isReady = true }) } }) diff --git a/src/views/Portfolio.svelte b/src/views/Portfolio.svelte index b5ef44b..a23a142 100644 --- a/src/views/Portfolio.svelte +++ b/src/views/Portfolio.svelte @@ -11,31 +11,10 @@ let sectionEl = $state(null) // --- Derived --- - const isActive = $derived(slides.active?.id === 'portfolio') - const projects = $derived(data?.projects ?? []) + const isActive = $derived(slides.active?.id === 'portfolio') + const projects = $derived(data?.projects ?? []) const currentProject = $derived(projects[currentIndex] ?? null) - // Capture du hash synchrone avant que tout effect puisse le modifier - const initialHash = window.location.hash.slice(1) - - // --- Ancres --- - function setAnchor(index) { - const slug = projects[index]?.slug - if (!slug) return - history.replaceState(null, '', '#' + slug) - } - - function clearAnchor() { - history.replaceState(null, '', window.location.pathname + window.location.search) - } - - // Initialisation depuis l'ancre URL — une seule fois quand projects est prêt - $effect(() => { - if (projects.length === 0 || !initialHash) return - const idx = projects.findIndex(p => p.slug === initialHash) - if (idx > 0) currentIndex = idx - }) - // --- Scroll nav composable --- const nav = createScrollNav({ isActive: () => isActive, @@ -45,7 +24,6 @@ : Math.max(currentIndex - 1, 0) if (next === currentIndex) return false currentIndex = next - setAnchor(next) }, }) @@ -62,17 +40,10 @@ }) // --- Effect: reset when slide deactivated --- - // wasActive évite que clearAnchor() s'exécute au montage initial - // (isActive est false avant l'initialisation des slides) - let wasActive = false $effect(() => { - if (isActive) { - wasActive = true - } else if (wasActive) { + if (!isActive) { nav.reset() currentIndex = 0 - clearAnchor() - wasActive = false } }) @@ -126,7 +97,7 @@