Svelte переход по страницам, дублирующий весь сайт __layout.svelte
Я новичок в Svelte и пытаюсь применить анимацию к содержимому моей страницы, когда пользователь переходит на новую страницу. Однако из-за анимации весь мой веб-сайт дублируется во время анимации.
Мой контент выглядит так:
Это связано с отсутствием ссылки на элементы?
2 ответа
Да, этого следовало ожидать.(кроме смешения анимации и перехода).
Ваша первая страница покидает DOM, а
В то же время, когда появляется ваша новая страница, это вызывает
Как видите, логично, что при переходе ввода / вывода будут присутствовать обе страницы целиком.(Почти) ты ничего не можешь поделать.
Однако вы можете отложить
Если вы не хотите, чтобы две страницы располагались одна под другой, вам нужно обернуть их в другой div (который всегда присутствует) и начать возиться с позиционированием в css. Это можно использовать, например, для того, чтобы страница скользила вправо и влево, создавая впечатление, что одна вытесняет другую.
У меня была такая же проблема с некоторыми изображениями, которые я хотел изменить реактивно на основе page.url.pathname, весь мой __layout.svelte был продублирован.
я решил это с помощью ключевой директивы:
<script lang="ts">
import { page } from '$app/stores';
import { fade } from 'svelte/transition';
import { colors } from '/stores';
const nav = [{ title: '/Dev', path: '/', imgUrl: '../images/dev', color: 'devBG', keyword: '/dev' }]
let keywordTitle: string;
let activeIndex: number = 0;
$: pageUrl = $page.url.pathname;
$: {
switch (pageUrl) {
case '/':
keywordTitle = nav[0].keyword;
colors.set(nav[0].color);
activeIndex = 0;
break;
}
</script>
{#each nav as cat, i}
{#key $page}
{#if activeIndex === i}
<img transition:fade src="{cat.imgUrl}-1800.jpg " />
{/if}
{/key}
{/each}
key уничтожает и воссоздает их содержимое при изменении значения выражения. Документы для {#key}: https://svelte.dev/docs#key