Aller au contenu

Cours 9

Retour sur les exercices

HTML > HTML vs. JS > HTML


Surlignage automatique de la syntaxe et IntelliSense pour HTML et CSS dans les littéraux de modèle JavaScript

GSAP

GSAP est une bibliothèque JavaScript dédiée à l'animation Web.

Animer, mais animer quoi ?

GSAP peut animer presque n'importe quelles propriétés CSS :

Propriété GSAP Effet
x, y Déplacement horizontal / vertical (via transform)
rotation Rotation en degrés
scale Mise à l'échelle
opacity Transparence
backgroundColor Couleur de fond
width / height Dimensions
Quelques raccourcis de transformation supplémentaires
Propriété GSAP Équivalent CSS
xPercent: 50 transform: translateX(50%)
yPercent: 50 transform: translateY(50%)
scaleX: 2 / scaleY: 2 transform: scaleX(2) / scaleY(2)
skew: 30 transform: skew(30deg)
transformOrigin: "center 40%" transform-origin: center 40%
autoAlpha: 0 opacity: 0 et visibility: hidden

Les propriétés CSS s'écrivent en camelCase

En JavaScript, le trait d'union est interdit dans un nom de propriété. On retire donc le - et on met la lettre suivante en majuscule : background-color devient backgroundColor, border-radius devient borderRadius, font-size devient fontSize.

Comment animer ?

Avec ce qu'on appelle un tween (vient de « be tween »). C'est une animation qui calcule toutes les valeurs entre deux points.

See the Pen gsap.to() by TIM Montmorency (@tim-momo ) on CodePen .

Anatomie d'un tween
gsap.to(".boite", {   
  x: 200,             
  rotation: 90,
  duration: 1.5         
})

Installation

Terminal
npm install gsap

On pourrait écrire directement dans src/main.js, mais afin de bien structurer notre code il est préférable créer un nouveau fichier src/gsap.js.

src/gsap.js
import gsap from "gsap"

export function gsapAnimations() {

  // Code GSAP ici. Exemple :

  // gsap.from(".boite", { 
  //   x: 200, 
  //   rotation: 90, 
  //   duration: 1.5 
  // })

}

Importer notre fichier gsap dans main.js :

src/main.js
import "./style.css"
import { gsapAnimations } from "./gsap.js"

gsapAnimations()

Le HTML à animer, lui, peut aller soit dans index.html ou dans main.js (avec innerHTML, comme dans le projet de départ de Vite). Ça revient au même.

src/main.js
import "./style.css"
import { gsapAnimations } from "./gsap.js"

document.querySelector('#app').innerHTML = `
<div class="boite"></div>
`;

gsapAnimations();
index.html
<body>
  <div class="boite"></div>
  <script type="module" src="/src/main.js"></script>
</body>

Les Tweens

Méthode Simplement dit
gsap.to() « va vers là »
gsap.from() « viens de là »
gsap.fromTo() « de là à là »
gsap.set() « va là, sans animation »

to()

De l'état initial aux valeurs spécifiées

from()

Garde en mémoire l'état initial, mais commence aux valeurs spécifiées vers l'état initial

fromTo()

On définit l'état initial et la destination dans la même commande.

set()

Équivalent à un to(), mais instantané.

Les unités

Par défaut, GSAP utilise les pixels (px) et les degrés pour les transformations, mais vous pouvez utiliser d'autres unités comme le vw, les radians, etc.

x: 200,       // Place l'élément précisément à 200px du côté gauche
x: "+=200"    // Place l'élément à 200px de plus que sa position
x: '50vw'     // Place l'élément au milieu de l'écran

rotation: 360       // Utilise les degrés pour la rotation
rotation: "1.25rad" // Utilise les radians pour la rotation (2pi = 360 degrés)

Le point de pivot

Une rotation (ou une mise à l'échelle) se fait toujours autour d'un point de pivot. Par défaut, ce point est le centre de l'élément.

Le point de pivot se règle avec la propriété CSS transform-origin, ou avec son équivalent GSAP transformOrigin.

gsap.to(".aiguille", {
  //...
  transformOrigin: "left center",  
})

Propriétés spéciales

Paramètre Rôle
duration Durée en secondes
delay Attente avant de démarrer
repeat Nombre de répétitions (-1 = infini)
repeatDelay Pause entre chaque répétition
yoyo Repart en sens inverse à chaque répétition
ease Courbe d'accélération (voir plus bas)
Exemple complet
gsap.to(".carte", {
  // Propriétés animées
  y: -20,
  rotation: 5,

  // Paramètres
  duration: 0.6,
  delay: 1,
  repeat: -1,
  repeatDelay: 1,
  yoyo: true
})

GSAP Cheat Sheet

Les courbes d'accélération

Le lissage (ease) décrit comment l'animation accélère et ralentit. C'est ce qui distingue une animation robotique d'une animation vivante. GSAP | Ease Visualizer

Exercices Tween

Exercice - GSAP
Zombi

Exercice - GSAP
J'en ai mon truck

Les timelines

Un tween anime une chose. Une timeline enchaîne plusieurs tweens, comme un scénario. Par défaut, chaque tween attend la fin du précédent.

gsap.timeline()
  .to(".boite", { x: 100, duration: 1 })        // démarre à 0 s
  .to(".boite", { rotation: 360, duration: 1 }) // démarre après le premier
  .to(".boite", { y: 100, duration: 1 })        // démarre après le deuxième

Le paramètre de position

Un 3e argument ajuste le moment où un tween démarre dans la timeline :

Position Signifie
(rien) À la suite du tween précédent
"+=0.5" 0,5 s après la fin du précédent
"-=0.5" 0,5 s avant la fin du précédent (chevauchement)
"<" En même temps que le début du précédent
gsap.timeline()
  .to(".boite", { x: 100, duration: 1 })
  .to(".boite", { rotation: 360, duration: 1 }, "-=0.5")
  .to(".ombre", { opacity: 0, duration: 1 }, "<")
  .to(".boite", { y: 100, duration: 1 }, "+=0.2")

Exercice Timeline

Exercice - GSAP
Magie 🪄