L'API Canvas
Principe
Canvas
La balise <canvas>
de HTML5 crée un élément vide,
sur lequel le code Javascript peut « dessiner » pour créer des images dynamiquement.
<canvas id="mycanvas" width="400" height="300"></canvas>
Note
La largeur et la hauteur, fixées dans la balise canvas
, représentent sa taille initiale en pixels.
Si le canvas est redimensionné par CSS, sa taille d'affichage changera, et ses pixels seront redimensionnés en conséquence, mais le nombre de pixels (en largeur et en hauteur) ne changera pas.
Contexte
Pour pouvoir dessiner sur un canvas, il faut d'abord récupérer un objet contexte :
var canvas = document.getElementById('mycanvas');
var ctx = canvas.getContext('2d');
Différents types de contexte
2d
permet de générer des images 2Dwebgl
permet de générer des images 3D en utilisant le GPU (cf. http://webgl.org/)d'autres contextes peuvent apparaître à l'avenir
Commandes de bases pour le contexte 2D
Définir les couleurs
L'attribut
strokeStyle
permet de définir la couleur des traits qui seront dessinés.L'attribut
fillStyle
permet de définir la couleur de remplissage.Ces attributs prennent en paramètre une chaîne, contenant n'importe quelle description de couleur valide en CSS.
Exemple :
ctx.strokeStyle = "red";
ctx.fillStyle = "#00FF00";
Note
Ces commandes ne dessinent rien par elles-mêmes, elles conditionnent le comportement des commandes lancées ensuite.
Dessiner un rectangle
La méthode
strokeRect(x, y, w, h)
permet de dessiner le contour d'un rectangle, en utilisant la couleur définie parstrokeStyle
.La méthode
fillRect(x, y, w, h)
permet de dessiner un rectangle plein, en utilisant la couleur définie parfillStyle
.x
ety
indiquent le coin supérieur gauche du rectangle,w
indique sa largeur,h
indique sa hauteur. Ces valeurs sont données en pixels, mais peuvent être des nombres flottants.
Exemple :
ctx.fillRect(canvas.width/4, canvas.height/4,
canvas.width/2, canvas.height/2);
Largeur de ligne
En plus de leur couleur, il est possible de choisir la largeur
des lignes dessinées sur le canvas (par exemple par strokeRect
).
Ceci se fait en changeant l'attribut lineWidth
.
Sa valeur est exprimée en pixels (mais peut être un nombre flottant).
Pour aller plus loin
Projet
Votre travail
Écrivez une application de dessin en utilisant
canvas
et le contexte2d
.Il pourra être nécessaire d'utiliser les événements
mousedown
,mousemove
etmouseup
.Ces événements ont notamment deux attributs
pageX
etpageY
indiquant les coordonnées de la souris dans la page, à comparer avec les coordonnées de l'élément:canvas.offsetLeft
etcanvas.offsetTop
.
Pour aller plus loin
Autres utilisations
Un canvas transparent peut être positionné par dessus d'autres éléments (avec une utilisation judicieuse du CSS).
Le contexte
2d
peut également faire une "photographie" d'un élément graphique (image, vidéo, autre canvas) de la page à l'aide de la méthode drawImage.
Autres manières de gérer le graphisme
Une alternative aux Canvas est SVG (Standard Vector Graphics), un langage à balises similaire à HTML mais servant à décrire des images.
Ce langage est intégré à HTML5 et peut notamment être manipulé dans l'arbre DOM par du code Javascript.
Exemple :
<svg>
<rect x="10" y="10" width="20" height="20"
stroke="red" fill="lightYellow"></rect>
<rect x="50" y="10" width="20" height="20"
stroke="blue" fill="lightGreen"></rect>
</svg>