Une _transition_ est déclenchée par un élément qui entre ou sort du DOM suite à un changement d'état. Lorsqu'un bloc (comme un bloc `{#if ...}`) transitionne vers sa sortie, tous les éléments qu'il contient, incluant ceux n'ayant pas leurs propres transitions, sont gardés dans le DOM jusqu'à ce que chaque transition du bloc ait été appliquée. La directive `transition:` indique une transition _bidirectionnelle_, ce qui signifie qu'elle peut être inversée en douceur lorsque la transition est en cours. ```svelte {#if visible}
entre et sort en s'estompant
{/if} ``` ## Local vs global Les transitions sont locales par défaut. Les transitions locales sont jouées uniquement lorsque le bloc auquel elles appartiennent est créé ou détruit, mais _pas_ lorsque les blocs parent sont créés ou détruits. ```svelte {#if x} {#if y}

entre et sort en s'estompant uniquement lorsque y change

entre et sort en s'estompant uniquement lorsque x et y changent

{/if} {/if} ``` ## Transitions intégrées [!VO]Built-in transitions Une sélection de transitions intégrées peut être importée depuis le module [`svelte/transition`](svelte-transition). ## Paramètres de transition [!VO]Transition parameters Les transitions peuvent avoir des paramètres. (Les doubles `{{accolades}}` ne sont pas une syntaxe spéciale ; il s'agit simplement d'un objet défini au sein d'une balise d'expression.) ```svelte {#if visible}
entre et sort en s'estompant pendant 2 secondes
{/if} ``` ## Fonctions de transition personnalisées [!VO]Custom transition functions ```js /// copy: false // @noErrors transition = (node: HTMLElement, params: any, options: { direction: 'in' | 'out' | 'both' }) => { delay?: number, duration?: number, easing?: (t: number) => number, css?: (t: number, u: number) => string, tick?: (t: number, u: number) => void } ``` Les transitions peuvent utiliser des fonctions personnalisées. Si l'objet renvoyé a une fonction `css`, Svelte va générer des keyframes d'[animation web](https://developer.mozilla.org/fr/docs/Web/API/Web_Animations_API). L'argument `t` passé à `css` est une valeur entre `0` et `1` après l'application de la fonction `easing`. Les transitions _entrantes_ vont de `0` à `1`, les transitions _sortantes_ vont de `1` à `0` — autrement dit, `1` représente l'élément dans son état normal, sans qu'aucune transition ne lui ait été appliquée. L'argument `u` est égal à `1 - t`. La fonction est appelée de manière répétée _avant_ le début de la transition, avec des valeurs de `t` et `u` différentes. ```svelte {#if visible}
entre en trombe
{/if} ``` Une fonction de transition personnalisée peut également renvoyer une fonction `tick`, qui sera appelée _pendant_ la transition avec les mêmes arguments `t` et `u`. > [!NOTE] Si vous avez la possibilité d'utiliser `css` au lieu de `tick`, faites-le - les animations > web sont gérées hors du fil d'exécution principal (_main thread_), ce qui permet d'éviter des > ralentissements sur des appareils moins performants. ```svelte {#if visible}

Portez ce vieux whisky au juge blond qui fume

{/if} ``` Si une transition renvoie une fonction au lieu d'un objet de transition, la fonction sera appelée dans la micro-tâche suivante. Cela permet de coordonner plusieurs transitions, rendant les [effets de crossfade](/tutorial/deferred-transitions) possibles. Les fonctions de transitions acceptent également un troisième argument, `options`, qui peut contenir des informations à propos de la transition. Les valeurs disponibles dans l'objet `options` sont : - `direction` — `in`, `out`, ou `both` selon le type de transition ## Évènements de transition [!VO]Transition events Un élément possédant des transitions va déclencher les évènements suivants en plus des évènements standards du DOM : - `introstart` - `introend` - `outrostart` - `outroend` ```svelte {#if visible}

(status = "l'entrée a démarré")} onoutrostart={() => (status = 'la sortie a démarré')} onintroend={() => (status = "l'entrée est terminée")} onoutroend={() => (status = 'la sortie est terminée')} > Entre et sort en volant

{/if} ```