Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Pour dessiner (voire créer une animation graphique) directement dans une page web vous avez le choix entre deux technologies : SVG ou Canvas. Laquellle retenir ?
La première différence entre ces deux technologies tient aux types de données manipulées. SVG est un format vectoriel tandis que Canvas
est un format matriciel (bitmap). On a donc d’un côté, des formes définies à l’aide de points et de courbes, et de l’autre un "bouillon" de
pixels anonymes.
Une image produite par SVG ne perdra pas en qualité si elle est agrandie alors qu'une image créée par Canvas et agrandie
deviendra disgracieuse en particulier au niveau des courbes.
Une autre différence de fond entre ces deux technologies tient à la façon de les utiliser. SVG est un langage qui repose sur une syntaxe
XML, il est dit déclaratif. Vous dites explicitement au navigateur ce qu’il doit dessiner.
Canvas lui, repose sur une API (du JavaScript) : vous allez devoir programmer la façon dont le navigateur va devoir dessiner.
SVG reposant sur une syntaxe XML, son interprétation par un navigateur conduit à la construction d’un arbre DOM qui comprendra l’ensemble
des objets constitutifs de l'image. De son côté un dessin produit par Canvas n'est pas repris dans l'arbre DOM.
Pour parler plus simple chaque objet SVG pourra être manipulé avec JavaScript (ou CSS) en tant qu'élément du DOM alors qu'un dessin Canvas ne se
traduit par aucun élément nouveau dans le DOM.
Zoomez la page (zoom +) vous verrez alors que la première image qui est produite en SVG (image vectorielle) reste parfaitement nette alors que la deuxième image qui est produite avec Canvas (image matricielle) devient floue.
C'est aussi l'occasion de comparer les deux langages. Vous pouvez ainsi vérifier (en regardant le code ci-dessous) que les méthodes de programmation sont totalement différentes.
On crée un modèle sous forme d'un groupe de formes basiques ; groupe identifié "maison".
On clone N fois ce modèle.
On crée une boucle et à chaque passage dans la boucle on dessine la maison et on translate vers la droite.
Les balises svg & canvas sont des éléments HTML que l'on peut formater via CSS et en particulier on peut utiliser les raccourcis background, border, etc.
Les techniques de programmation sont radicalement différentes. SVG est déclaratif alors que Canvas est procédural.
En SVG on définit un modèle ; on identifie ce modèle "maison". On crée donc un noeud du DOM.
Ensuite, grâce à la balise use on crée huit clones de l'élément "maison".
En Canvas on crée une boucle qui est exécutée 8 fois et à chaque passage dans la boucle on effectue un changement d'origine grâce à
la méthode translate.
Dans chaque passage dans la boucle, on dessine une maison.
Aucune des formes crées ne sont des éléments du DOM !
Rien n'interdit dans une page web de superposer (via "position : absolute) une zone de dessin Canvas et une zone
de dessin SVG.
Utilisation combinée de SVG & Canvas