Un guide de référence rapide pour l'API du contexte de rendu 2D HTML5 Canvas (CanvasRenderingContext2D).
Obtention du contexte
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
Formes de base et remplissages
// Styles de couleurs et de contours
ctx.fillStyle = '#ff0000';
ctx.strokeStyle = '#0000ff';
ctx.lineWidth = 4;
ctx.lineCap = 'round'; // 'butt' | 'round' | 'square'
// Rectangles directs : x, y, largeur, hauteur
ctx.fillRect(10, 20, 200, 100);
ctx.strokeRect(10, 20, 200, 100);
ctx.clearRect(0, 0, canvas.width, canvas.height);
Tracés et formes personnalisées
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(100, 150);
ctx.closePath();
ctx.fill();
ctx.stroke();
Arcs et cercles
// arc(x, y, radius, startAngle, endAngle, counterClockwise)
ctx.beginPath();
ctx.arc(100, 100, 50, 0, Math.PI * 2, false);
ctx.stroke();
Pile d'états (Save & Restore)
ctx.save(); // Empile l'état actuel sur la pile
// Modifier fillStyle, transformations, ombres...
ctx.restore(); // Dépile et restaure l'état précédent
L'état sauvegardé comprend : strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation et la matrice de transformation courante.
Transformations de coordonnées
ctx.translate(dx, dy);
ctx.rotate(angleInRadians);
ctx.scale(scaleX, scaleY);
// Pivoter autour d'un point d'origine quelconque (ox, oy)
ctx.translate(ox, oy);
ctx.rotate(angle);
ctx.translate(-ox, -oy);
Dessin d'images
const img = new Image();
img.onload = () => {
// Dessiner l'image entière à (x, y)
ctx.drawImage(img, 0, 0);
// Image redimensionnée : (img, dx, dy, dWidth, dHeight)
ctx.drawImage(img, 0, 0, 150, 100);
// Image rognée : (img, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
ctx.drawImage(img, 50, 50, 100, 100, 0, 0, 100, 100);
};
img.src = 'picture.jpg';
Boucle d'animation
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Rendu des éléments du frame...
requestAnimationFrame(draw);
}
requestAnimationFrame(draw);