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 `