Svelte переход в __layout

Как можно использовать переходы в __layout для загрузки страницы с анимацией?
__layout.svelte :

      <script>
  import Header from '$lib/Header/index.svelte'
  import Footer from '$lib/Footer/index.svelte'
  import '../../app.css'
  import Animate from '$lib/Animate.svelte'
</script>

<Header />
<div class="bg-gray-100">
  <div class="container mx-auto px-4 sm:px-6 lg:px-8">
    <Animate>
      <slot />
    </Animate>
  </div>
</div>
<Footer />

Animate.svelte :

      <script>
  import { fade, fly } from 'svelte/transition'
</script>

<div in:fly={{ y: 200, duration: 2000 }} out:fade>
  <slot />
</div>

в этом примере эффекты перехода работают только один раз и показывают анимацию. но я бы хотел показывать переход каждый раз, когда эта страница меняется! Есть ли способ улучшить это приложение?

1 ответ

Для этого вам нужно использовать блок в сочетании с некоторой переменной, которая обновляется, когда вы этого хотите. Ты можешь использовать page из-за этого.

__layout.svelte:

      <script>
  import Header from '$lib/Header/index.svelte'
  import Footer from '$lib/Footer/index.svelte'
  import '../../app.css'
  import Animate from '$lib/Animate.svelte'
  import { page } from '$app/stores' // <-- new
</script>

<Header />
<div class="bg-gray-100">
  <div class="container mx-auto px-4 sm:px-6 lg:px-8">
    <!-- The key's content is destroyed and recreated everytime the $page
         variable changes -->
    {#key $page}
      <Animate>
        <slot />
      </Animate>
    {/key}
  </div>
</div>
<Footer />

Документы для $app/stores: https://kit.svelte.dev/docs#modules-$app-stores
Документы для {#key}: https://svelte.dev/docs#key

Другие вопросы по тегам