Exercice : la magie au défilement¶
Utilisation de l'IA interdite pour cette activité. Faites chauffer vos méninges!
L'essentiel en 3 points
- Vous reprenez la timeline de Magie, déjà écrite dans le gabarit. Vous ne la réécrivez pas : vous lui ajoutez un
scrollTrigger. - Étape par étape : déclencher au défilement (
markers,start), suivre le défilement (scrub), épingler la scène (pin), puis respecter le mouvement réduit. - Seul, environ 35 minutes. C'est exactement ce que vous ferez pour une scène de votre récit.
Gardez la page GSAP : ScrollTrigger ouverte à côté.
Obtenir votre dépôt (5 min)¶
Accepter l'exercice dans Classroom 50
- Ouvrez le lien ci-dessus, connectez-vous avec Sign in with GitHub, puis acceptez l'exercice.
- Clonez votre dépôt et ouvrez-le dans VS Code.
- Ouvrez
index.htmlavec Live Server.
Pas de npm install : GSAP est chargé par CDN, avec une balise <script> dans index.html, avant js/script.js. Comme dans votre récit.
Dans index.html, GSAP et le plugin ScrollTrigger sont déjà chargés. Dans js/script.js : l'état de départ et la timeline de l'exercice Magie. Défilez : le numéro se joue tout de suite, au chargement, même si la scène n'est pas encore à l'écran.
Aperçu du résultat¶
Partie 1 : déclencher au défilement (10 min)¶
- En haut de
js/script.js, enregistrez le plugin :gsap.registerPlugin(ScrollTrigger); - Ajoutez un objet de paramètres à
gsap.timeline(), avec unscrollTrigger:- l'élément observé (
trigger) : la scène,.scene; - les repères :
markers: true.
- l'élément observé (
Indice : où va le scrollTrigger?
Dans l'objet de paramètres de la timeline, pas dans un des .to() :
gsap.timeline({
scrollTrigger: {
// ...
},
})
.to(/* ... */)
- Défilez lentement. Observez les 4 repères : le numéro démarre quand
startcroisescroller-start. - Changez
startpour que le numéro démarre quand le haut de la scène atteint le milieu de l'écran. - Remontez : le numéro ne se rejoue pas. Ajoutez des
toggleActionspour qu'il se rejoue à l'envers quand on remonte au-dessus de la scène.
- Commit (
Partie 1 : déclenche le numéro au défilement), puis push.
Partie 2 : suivre le défilement (5 min)¶
Avec toggleActions, le numéro joue tout seul, à sa vitesse. Dans un récit, c'est le visiteur qui doit le faire avancer.
- Remplacez les
toggleActionsparscrub: true. Défilez, arrêtez, remontez. - Essayez ensuite
scrub: 1. Quelle différence?
Ce que vous devriez voir
Le numéro avance quand on descend, recule quand on remonte, s'arrête quand on s'arrête. Mais la scène continue de monter : on rate la fin du numéro, qui se joue pendant qu'elle sort de l'écran.
- Commit (
Partie 2 : le numéro suit le défilement), puis push.
Partie 3 : épingler la scène (10 min)¶
- Le numéro commence quand le haut de la scène touche le haut de l'écran : réglez
start. - Ajoutez
pin: true: la scène reste en place pendant tout le numéro. - Le numéro dure 3 écrans de défilement : réglez
endavec une valeur relative.
Indice : end relatif
end: "+=300%" : 3 hauteurs d'écran après le start.
- Défilez : la scène s'arrête, le numéro se joue au rythme de votre défilement, puis la page repart quand la main est sortie.
- Retirez les
markers. - Commit (
Partie 3 : épingle la scène), puis push.
Partie 4 : le mouvement réduit (5 min)¶
Avec le mouvement réduit, le numéro ne doit pas jouer, et rien ne doit rester caché : le chapeau, la baguette et la main restent visibles, à leur place.
- Enveloppez l'état de départ et la timeline dans
gsap.matchMedia(), avec la condition(prefers-reduced-motion: no-preference). - Testez : dans Chrome, inspecteur → menu ⋮ → More tools → Rendering → Emulate CSS media feature prefers-reduced-motion →
reduce. Rechargez : tout est visible, rien ne bouge, et la scène n'est plus épinglée.
Pourquoi l'état de départ va-t-il aussi dans le matchMedia()?
C'est le gsap.set() qui cache le chapeau, la main et la baguette. Si on le laisse dehors, ils restent cachés avec le mouvement réduit... et la timeline qui devait les montrer ne joue jamais.
- Commit (
Partie 4 : respecte le mouvement réduit), puis push.
Bonus (facultatif)¶
- À la fin du numéro, la main reste quelques instants en l'air avant que la page reparte. Indice : un tween « vide » à la fin de la timeline,
.to({}, { duration: 1 }), ajoute du défilement sans rien animer. - Ajoutez un titre dans la scène (« Ta-da! ») qui apparaît à la toute fin du numéro.
- Commit (
Bonus : une pause à la fin), puis push.
Pour remettre : un push sur main
Votre exercice est remis seulement quand vos commits sont poussés (push) sur la branche main de votre dépôt Classroom 50. Un commit qui reste sur votre poste, je ne le vois pas.
Je vois votre dépôt et vos commits dans Classroom 50.
Scène et images : exercice Magie du cours Web 3 (582-311), TIM Montmorency, avec sa permission.