Aula 18 - Animações e Transições Integradas em Svelte 🎭
Objetivo Pedagógico
Objetivo: Utilização das diretivas nativas de animação do Svelte (transition, in, out, animate), coordenadas físicas com spring e tweened.
📑 1. Fundamentos Teóricos & Análise Técnica
Uma das maiores vantagens da arquitetura de compilação do Svelte é o suporte de primeira classe a transições e animações nativas, sem a necessidade de adicionar bibliotecas pesadas de animação de terceiros ao pacote final da aplicação.
O compilador Svelte fornece diretivas especializadas integradas diretamente na sintaxe do template: 1. transition:fn: Aplica animação tanto na entrada (mount) quanto na saída (destroy) do elemento no DOM. 2. in:fn e out:fn: Permitem comportamentos visuais assimétricos (ex: um elemento surge com efeito fade suave, mas é dispensado com um deslocamento slide rápido). 3. animate:flip: Implementa o algoritmo FLIP (First, Last, Invert, Play) para animar automaticamente a reordenação suave de itens em listas ({#each}) quando ocorrem deleções ou ordenações. 4. Módulos de Física (svelte/motion): Primitivas como tweened e spring simulam propriedades físicas como rigidez (stiffness) e amortecimento (damping), conferindo realismo mecânico às interações.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Item["Item Adicionado / Removido da Lista"] --> SvelteEngine["Motor de Transições Nativo"]
SvelteEngine --> Directives{"Diretiva Aplicada"}
Directives -->|transition:fade| Fade["Interpolação de Opacidade (CSS Keyframes Gerados)"]
Directives -->|animate:flip| FLIP["Cálculo de Coordenadas FLIP e Animação Fluida"]
Directives -->|motion:spring| Spring["Cálculo Físico com Inércia e Amortecimento"]
style Item fill:#e3f2fd,stroke:#1565c0
style SvelteEngine fill:#fff3e0,stroke:#e65100
style FLIP fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Zero Bibliotecas Externas: Efeitos de alta fidelidade visual integrados nativamente ao compilador. - Algoritmo FLIP Automático: Reordenação de listas sem cálculos manuais de coordenadas pelo desenvolvedor. - Transições Parametrizadas: Controle de duração, atraso (delay) e curvas de aceleração (easing). - Eventos de Ciclo de Vida da Animação: Gatilhos onintrostart, onoutroend para coordenar encadeamentos complexos.
🛠️ 2. Implementação Prática em Svelte Motion e Transitions
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// AnimatedList.svelte (Transições Nativas e FLIP em Svelte)
<script lang="ts">
import { fade, slide } from 'svelte/transition';
import { flip } from 'svelte/animate';
let items = $state([
{ id: 1, title: 'Planejar Arquitetura' },
{ id: 2, title: 'Desenvolver Componentes' },
{ id: 3, title: 'Testes de Acessibilidade' }
]);
function removeItem(id: number) {
items = items.filter(i => i.id !== id);
}
</script>
<ul class="task-list">
{#each items as item (item.id)}
<!-- Transição assimétrica e animação FLIP de reordenação -->
<li in:fade={{ duration: 200 }}
out:slide={{ duration: 250 }}
animate:flip={{ duration: 300 }}>
<span>{item.title}</span>
<button onclick={() => removeItem(item.id)}>Remover</button>
</li>
{/each}
</ul>
💡 Análise Passo a Passo do Código
- Chave de Identidade Obrigatória: O identificador
(item.id)no bloco{#each}é indispensável para que o algoritmo FLIP rastreie a posição de cada nó. - Transições In e Out Independentes:
in:fadeeout:slidecriam uma experiência visual assimétrica e refinada. - Animate FLIP: Ao remover um item intermediário, os elementos adjacentes deslizam suavemente para preencher o espaço vazio.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto