Zrozumienie przejść i animacji w Svelte

Photo of author

By maciekx

Umiejętnie zaimplementowana animacja potrafi znacząco podnieść komfort użytkowania aplikacji, stanowiąc jednocześnie skuteczny sposób na przekazywanie feedbacku użytkownikowi. Svelte, dzięki swoim wbudowanym funkcjom, umożliwia łatwe dodawanie animacji i przejść, minimalizując konieczność sięgania po zewnętrzne biblioteki JavaScript.

Inicjalizacja projektu Svelte

Zanim zaczniesz przygodę z Svelte, upewnij się, że masz zainstalowane środowisko Node.js oraz menedżera pakietów Node (NPM). W terminalu uruchom komendę:

 npm create vite

Spowoduje to utworzenie nowego projektu opartego na Vite.js. Nadaj nazwę swojemu projektowi, wybierz Svelte jako framework i wariant JavaScript. Następnie przejdź do katalogu projektu i wykonaj polecenie instalujące niezbędne zależności:

 npm install

W celu rozpoczęcia pracy na czystym projekcie, usuń domyślne elementy, czyli foldery Assets i lib, a także wyczyść zawartość plików App.svelte i App.css.

Wykorzystanie animacji płynnych (tweening) w Svelte

Animacja płynna (tweening) to technika, która w animacji i grafice komputerowej generuje pośrednie klatki pomiędzy kluczowymi, zapewniając płynne i naturalne ruchy lub przejścia. Svelte udostępnia mechanizm animacji, który umożliwia animowanie elementów za pomocą wartości numerycznych, co ułatwia tworzenie subtelnych animacji i przejść w aplikacjach webowych.

Funkcja `tweened` jest częścią modułu `svelte/motion`. Aby wykorzystać animację w swoim komponencie, należy ją zaimportować:

 import { tweened } from 'svelte/motion'

W istocie, mechanizm animacji to zapisywalny magazyn (store) Svelte. Magazyn Svelte to obiekt JavaScript służący do zarządzania stanem. Magazyn animacji oferuje dwie metody: `set` (ustaw) i `update` (aktualizuj). Podstawowa składnia magazynu animacji prezentuje się następująco:

 const y = tweened(defaultValue, {
    duration: [czas-w-milisekundach],
    easing: [funkcja-wygładzania],
})

Powyższy fragment definiuje zmienną `y`, powiązaną z magazynem animacji. Magazyn przyjmuje dwa parametry. Pierwszy z nich określa wartość początkową, jaką ma przyjąć `y`. Drugi parametr to obiekt zawierający dwa klucze: `duration` (czas trwania) i `easing` (wygładzanie). `Duration` określa czas trwania animacji w milisekundach, a `easing` – funkcję wygładzania.

Funkcje wygładzania w Svelte kontrolują zachowanie animacji. Są one dostępne w module `svelte/easing`, dlatego przed ich użyciem należy zaimportować wybraną funkcję. Svelte oferuje wizualizator funkcji wygładzania, który pozwala na eksperymentowanie z różnymi rodzajami animacji.

Aby zilustrować użycie mechanizmu animacji, poniżej znajduje się przykład, który wykorzystuje magazyn animacji do zwiększenia rozmiaru elementu w Svelte.

 <script>
  import { tweened } from "svelte/motion";
  import { bounceOut } from "svelte/easing";

  const size = tweened(0, {
    easing:bounceOut
  })
</script>

<div class="container">
  <div style={`height: ${$size * 30}px;`}>
  </div>
</div>
<button on:click={()=>(size.update(()=>$size+3))}>Zwiększ rozmiar</button>

<style>
  .container{
    display: flex;
    align-items: flex-end;
    margin-top: 400px;
  }
  div{
    height:0;
    width:100px;
    background-color: red;
  }
</style>

Powyższy kod importuje dwie funkcje: `tweened` z `svelte/motion` oraz `bounceOut` z `svelte/easing`. Następnie deklarowana jest stała, powiązana z magazynem animacji, który ma wartość początkową 0. Dostęp do wartości magazynu (aktualnej wartości) uzyskujemy za pomocą symbolu `$`. Kolejnym parametrem jest obiekt z kluczem `easing`, który odwołuje się do funkcji wygładzania `bounceOut`.

W części szablonu HTML, przycisk zawiera dyrektywę `on:click`, która wywołuje metodę `update` powiązania `size`. Metoda ta zwiększa wartość magazynu `$size` o 3 za każdym kliknięciem. Element `div` ma style wbudowane, które zależą od wartości magazynu `$size`. Po uruchomieniu kodu, w przeglądarce będzie widoczny efekt animacji.

Przejścia w Svelte

Do płynnego wprowadzania i usuwania elementów z Document Object Model (DOM), Svelte udostępnia dyrektywę przejścia oraz moduł `svelte/transition`, który eksportuje przydatne funkcje. Na przykład, aby rozmyć element podczas jego wstawiania i usuwania z DOM, należy zaimportować funkcję `blur` z `svelte/transition`:

 <script>
import { blur } from 'svelte/transition';
</script>

Następnie należy dodać mechanizm montowania i odmontowywania elementu z DOM. Wewnątrz tagu `


newsblog.pl