Rafraîchissez la page (F5) et vérifiez qu'un 4ème cercle apparaît
✅ Validation : Vous devriez voir 3 cercles blancs semi-transparents (ou 4 si vous avez fait l'exercice) dans le conteneur violet.
💡 À comprendre :
/* Position absolute par rapport au conteneur parent */
position: absolute;
top: 50px; /* 50px depuis le haut */
left: 50px; /* 50px depuis la gauche */
/* OU utiliser bottom/right */
bottom: 100px; /* 100px depuis le bas */
right: 80px; /* 80px depuis la droite */
✨ ÉTAPE 3 : Animation sur trajectoire elliptique
Objectif : Faire suivre le sprite une trajectoire définie en SVG.
📝 À FAIRE VOUS-MÊME :
ÉTAPE 3.1 - Observer le SVG :
Cherchez dans le code HTML la balise <svg id="hidden-svg">
Observez le viewBox="0 0 300 269" → système de coordonnées de 300×269 unités
Observez le <path id="monChemin" d="..."> → c'est la trajectoire elliptique
ÉTAPE 3.2 - Décommenter le code JavaScript :
Trouvez le script : Descendez tout en bas du code HTML jusqu'à <script>
Repérez les commentaires : Vous verrez /* au début et */ à la fin
Supprimez ces lignes :
Supprimez la ligne /* TODO ÉTAPE 3...
Supprimez la ligne FIN DU CODE... et le */
Vérifiez : Le code JavaScript ne doit plus être grisé/en commentaire
ÉTAPE 3.3 - Tester l'animation :
Enregistrez votre fichier (Ctrl+S)
Rafraîchissez la page dans le navigateur (F5)
Ouvrez la console (F12 → onglet Console)
Vérifiez qu'il n'y a pas d'erreurs (texte rouge dans la console)
Cliquez sur le bouton "▶ Démarrer"
Le sprite (point jaune) doit suivre l'ellipse !
❓ QUESTIONS DE COMPRÉHENSION :
Que fait path.getTotalLength() ?
Réponse attendue : Calcule la longueur totale du chemin SVG
Que fait path.getPointAtLength(distance) ?
Réponse attendue : Retourne les coordonnées (x, y) à une distance donnée sur le chemin
Pourquoi divise-t-on point.x par svgWidth ?
Réponse attendue : Pour convertir en pourcentage (normaliser entre 0 et 1)
Pourquoi multiplie-t-on ensuite par 600 ?
Réponse attendue : Pour adapter au conteneur qui fait 600px de large
Que représente la variable progress ?
Réponse attendue : La position sur le chemin, de 0 (début) à 1 (fin)
Que se passe-t-il quand progress atteint 1 ?
Réponse attendue : On le remet à 0 pour recommencer l'animation en boucle
🔍 COMMENT ÇA MARCHE :
La conversion des coordonnées en 3 étapes :
// ÉTAPE 1 : Coordonnées SVG (système du viewBox)
point.x = 150 (dans le système 0-300)
point.y = 100 (dans le système 0-269)
// ÉTAPE 2 : Conversion en pourcentage
percentX = 150 / 300 = 0.5 (50%)
percentY = 100 / 269 = 0.37 (37%)
// ÉTAPE 3 : Conversion en pixels du conteneur
x = 0.5 × 600 = 300px (50% de 600px)
y = 0.37 × 600 = 222px (37% de 600px)
🎯 EXERCICE DE TEST :
Une fois l'animation lancée :
Testez le bouton "⏸ Pause" → l'animation doit s'arrêter
Testez le bouton "↺ Recommencer" → le sprite retourne au début
Bougez le curseur "Vitesse" → l'animation doit accélérer ou ralentir
Observez l'affichage de la position en % et des coordonnées x, y
✅ Validation : Le sprite jaune suit la trajectoire elliptique en boucle. Les boutons et le curseur fonctionnent.
⚠️ En cas d'erreur :
Le sprite ne bouge pas : Vérifiez que vous avez bien décommenté TOUT le code JavaScript
Erreur dans la console : Vérifiez qu'il n'y a pas de /* ou */ au milieu du code
Le sprite est invisible : Vérifiez le CSS de #sprite
🎨 ÉTAPE 4 : Créer votre propre tracé avec GIMP
Objectif : Remplacer l'ellipse par votre propre dessin créé dans GIMP.
📝 À FAIRE VOUS-MÊME :
PARTIE A - Créer le tracé dans GIMP :
Ouvrir GIMP
Fichier → Nouvelle image
Largeur : 300 pixels
Hauteur : 300 pixels
Cliquez sur OK
Activer l'outil Chemin
Appuyez sur la touche B
OU cliquez sur l'icône "Chemins" dans la boîte à outils
Dessiner votre tracé
Cliquez pour créer des points (au moins 4-5 points)
Créez une forme intéressante (vague, spirale, zigzag...)
Conseil : Restez dans l'image, ne sortez pas des bords
Optionnel : Clic droit sur le dernier point → "Fermer le chemin" pour faire une boucle fermée
Exporter en SVG
Fichier → Exporter sous...
Donnez un nom : mon-trace.svg
Vérifiez que l'extension est bien .svg
Cliquez sur Exporter
Dans la fenêtre suivante, cliquez encore sur Exporter
PARTIE B - Extraire le path du fichier SVG :
Ouvrir le fichier SVG avec un éditeur de texte
Clic droit sur mon-trace.svg → Ouvrir avec → Bloc-notes (ou VSCode, Notepad++)
Repérer le viewBox
Cherchez la ligne contenant <svg ... viewBox="0 0 300 300">
Notez les dimensions (ex: 300 300)
Copier le path
Cherchez la ligne <path ... d="M 50,50 C ...">
Sélectionnez TOUT le contenu de d="..." (entre les guillemets)
Copiez-le (Ctrl+C)
PARTIE C - Intégrer dans votre code HTML :
Commenter l'ancien SVG
Cherchez la section avec <svg id="hidden-svg"> (l'ellipse)
Cherchez la section "ÉTAPE 4 : Votre SVG personnalisé"
Retirez le <!-- au début
Retirez le --> à la fin
Coller votre path
Remplacez COLLEZ_ICI_VOTRE_PATH_DEPUIS_GIMP
Par le contenu que vous avez copié depuis le fichier SVG GIMP
Adapter les dimensions si nécessaire
Si votre viewBox GIMP était 300 300, pas de changement
Si c'était différent (ex: 400 400), modifiez dans le JavaScript :
// Cherchez ces lignes et modifiez :
const svgWidth = 400; // au lieu de 300
const svgHeight = 400; // au lieu de 269
PARTIE D - Tester votre tracé :
Enregistrez votre fichier HTML (Ctrl+S)
Rafraîchissez la page dans le navigateur (F5)
Ouvrez la console (F12) et vérifiez qu'il n'y a pas d'erreurs
Cliquez sur "▶ Démarrer"
Le sprite doit suivre VOTRE tracé !
❓ QUESTIONS :
Où est définie la trajectoire du sprite ?
Réponse : Dans l'attribut d de la balise <path>
Pourquoi doit-on adapter svgWidth et svgHeight ?
Réponse : Pour que la conversion de coordonnées corresponde aux dimensions du viewBox de notre SVG GIMP
Que se passe-t-il si on oublie de commenter l'ancien SVG ?
Réponse : Il y aura deux id="monChemin", ce qui crée un conflit
🎯 DÉFI BONUS (pour les rapides) :
Créez un tracé en forme de votre initiale (première lettre de votre prénom)
Modifiez la couleur du sprite en changeant background: dans le CSS
Créez un deuxième sprite avec un ID différent et faites-le suivre le même tracé
✅ Validation : Le sprite jaune suit votre tracé personnalisé créé dans GIMP.
⚠️ Problèmes courants :
Le sprite ne bouge plus : Vérifiez que l'ID est bien id="monChemin" et qu'il n'y en a qu'un seul (commentez l'ancien SVG)
Le sprite sort du cadre : Adaptez svgWidth et svgHeight selon votre viewBox GIMP
Erreur "Cannot read property...": Vérifiez la syntaxe du path (guillemets, pas de caractères manquants)
Le tracé SVG est vide dans GIMP : Assurez-vous d'avoir bien utilisé l'outil "Chemins" (touche B) et non le pinceau