13. Syntaxe avancée

5. Crossfade

La meilleure transition de la Terre !

Il existe une transition plus cool que toutes les autres : crossfade.

Cette transition permet de "déplacer" des éléments d'un endroit vers un autre. Plutôt que de décrire l'effet que ça rend, allez plutôt voir ici pour mieux vous rendre compte.

Elle fonctionne en "envoyant" un élément vers un autre, qui lui va "recevoir" celui qui a été envoyé.

Comme pour toutes les transitions, la transition crossfade doit s'appliquer sur des éléments qui sont susceptibles d'être ajoutés ou supprimés par un bloc logique, comme un {#if} ou un {#each}.

Utilisation

Pour créer ce genre de transition :

  • vous devez d'abord créer send et receive en exécutant crossfade avec quelques paramètres, comme duration
  • puis, il faut ajouter des transitions in et out correspondant à send et receive sur chacun des éléments que vous souhaitez voir échanger leur place
  • enfin, il est nécessaire d'identifier précisement les éléments en train de transitioner en utilisant une clé key (un id par exemple)
<script>
	import { crossfade } from 'svelte/transition';

	const [send, receive] = crossfade({
		duration: 500
	});
</script>

{#if condition}
	<h1 in:send={{ key }} out:receive={{ key }}>BIG ELEM</h1>
{:else}
	<small in:send={{ key }} out:receive={{ key }}>small elem</small>
{/if}

Cette transition n'est pas une animation, même si elle en l'air. En effet, les éléments qui transitionnent simultanément ne font qu'échanger leur place tout en apparaissant / disparaissant, créant l'illusion d'un déplacement.

À vous !

Dans la page /team, on souhaite voir les membres se "déplacer" pour passer des titulaires aux remplaçants et vice-versa.

  • Créer une transition crossfade, et en extraire send et receive.

  • Utiliser send et receive couplés à in et out pour simuler le déplacement des membres d'une liste à une autre. Si besoin, supprimer une précédente transition, ou bien rajouter une <div> autour des éléments concernés.


En savoir plus sur ce chapitre