Mior Agency

Animation de voiture avec HTML et SVG — Smashing Magazine

Salut! Et si vous aimez le HTML, vous êtes au bon endroit !

J’adore HTML. En tant que développeur front-end à l’ancienne, je pense que c’est une compétence très sous-estimée. J’écris du HTML depuis 2005 environ, et aujourd’hui, le navigateur peut à lui seul faire presque tout ce que Flash pouvait faire il y a près de deux décennies.

un de ces astuce HTML a maintenant s’appelle <animateMotion> — ceux qui connaissent Flash s’en souviendront comme Le guide du mouvement. J’ai trouvé cette vidéo d’il y a 14 ans, mais la méthode était là depuis un moment avant :

Voir sur YouTube) »>
Tutoriel Flash – 5 – Calques de guide de mouvement (regarder sur YouTube)

L’idée est de créer un chemin pour les éléments à suivre… et le tour est joué !

Voici un exemple de ce que vous pouvez faire avec <animateMotion>:

Si vous jetez un œil à la documentation MDN, vous verrez un exemple simple d’un cercle rouge suivant un chemin dans une boucle infinie. Les voitures de course dans l’aperçu en direct suivent les mêmes règles simples, et c’est ainsi que cela fonctionne !

Trois voitures animées en bleu, vert et rose suivant des lignes pointillées
Un exemple simple de ce qui peut être réalisé en utilisant animateMotion. (Voir l’animation)

Utilisation de SVG animateMotion

Voici une version simplifiée que je vais utiliser pour expliquer certains des détails les plus fins.

Note: J’ai supprimé certaines des valeurs de chemin par souci de brièveté, mais vous pouvez voir src pour l’extrait de code suivant dans simple-version.html.)

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Example</title>
  </head>
  <body>
    <main>
      <svg viewBox="0 0 307 184" xmlns="http://www.w3.org/2000/svg">
        <g id="track">
          <g id="track-lines">
            <path fill="none" stroke="#facc15" d="M167.88,111.3..." />
          </g>

          <g id="pink-car">
            <animateMotion dur="4s" repeatCount="indefinite" rotate="auto" path="M167.88,111.3..." />
            <path fill="#EC4899" d="M13.71,18.65c0.25-0.5..." />
          </g>
        </g>
      </svg>
    </main>
  </body>
</html>

La première chose à regarder est la <g> élément avec le id de track-lines. C’est la ligne pointillée jaune qui représente le chemin que la voiture suivra.

vous verrez aussi un autre <g> élément avec le id de pink-car. Au sein de ce groupe se trouve le <animateMotion> élément. a un attribut de path. Les nombres utilisés pour former ce chemin sont les mêmes que les nombres qui forment le track-lines. UN <animateMotion> L’élément est invisible et son seul but est de fournir un chemin à suivre pour un élément.

En parlant de cela, sous le <animateMotion> l’élément est un autre <path> élément, c’est la voiture rose, et elle suivra le chemin de son voisin le plus proche.

animateMotion les attributs

Il y a quelques attributs supplémentaires que le <animateMotion> l’élément accepte ; ce sont les suivants :

  • dur: La durée de l’animation.
  • repeatCount: le nombre de fois que l’animation doit être répétée.
  • rotate: Cela peut être considéré comme une orientation vers le chemin. Cela garantira que l’élément que vous animez autour du chemin fera toujours face à la direction de déplacement.
  • path: Comme expliqué, il s’agit du chemin réel qu’un élément suivra.

Les documents MDN montrent le <animateMotion> élément en tant qu’enfant d’un Svg <circle> formulaire par exemple :

<circle r="5" fill="red">
  <animateMotion
    dur="10s"
    repeatCount="indefinite"
    path="M20,50 C20,-50 180,150 180,50 C180-50 20,150 20,50 z" />
</circle>

Bien que cette approche fonctionne pour les formes, elle ne fonctionnera que si l’élément peut accepter un élément enfant. L’élément de chemin SVG ne le peut pas, il encapsule donc tout dans le <g> L’élément permet à HTML de déterminer où le système de coordonnées doit commencer et quels éléments doivent suivre le chemin. Sournois aïe !

Et c’est ça. J’ai conçu la piste et les autres éléments que vous voyez dans le lien de prévisualisation dans Adobe Illustrator et j’ai tout exporté au format SVG. J’ai ensuite fait un peu de remaniement manuel pour m’assurer que les voitures étaient adjacentes à un <animateMotion> élément. Et voila! Un hippodrome !

Accessibilité

Petit bémol, le <animateMotion> L’élément n’observe pas nativement le mouvement préféré-réduit. Pour résoudre ce problème dans l’aperçu, j’ai ajouté une requête multimédia qui définit n’importe quel élément avec le nom de classe de car pour display: none;. Pas idéal, mais au moins c’est sûr pour le mouvement !

J’espère que vous avez apprécié cet article, et si vous avez des questions, venez me trouver sur Twitter. @PaulieScanlonoh, et si vous êtes un meilleur illustrateur que moi, n’hésitez pas à redessiner la piste de course et les voitures, et je serai heureux de le coder !

Rendez-vous en ligne !

Lecture supplémentaire sur SmashingMag

édito fracassant
(Oui oui)

Laissez un commentaire

Derniers Posts
Une Question ? Un Projet ?
Quel que soit votre projet, MIOR AGENCY vous écoute, analyse vos besoins et propose des pistes de travail en conséquence. Vous avancez avec sérénité et confiance.