Table des matières

Activité Canvas N° 1

Présentation

La balise <canvas> est élément HTML qui peut être utilisé pour dessiner et animer des éléments graphiques à l'aide de scripts JavaScript notamment.

Cette activité présente les bases d'utilisation de l'élément <canvas> pour dessiner des graphiques en 2D.

L'élément <canvas> n'est pas reconnu par les anciens navigateurs. La taille par défaut de <canvas> est 300 px × 150 px (largeur × hauteur) mais des tailles personnalisées peuvent être définies à l'aide des propriétés HTML height et width.

Pour dessiner des graphiques sur un éléments <canvas>, il faut utiliser un objet de contexte JavaScript, qui crée des graphiques à la volée.

Créer un canvas dans un page HTML

Voici un élément <canvas> avec un contenu de repli affichant le texte Canvas non supporté par votre navigateur !.

<canvas id="affichagefleche" width="150" height="150">
   Canvas non supporté par votre navigateur !
</canvas>

Explications :

  • L'attributs id permetra d'identifier de manière unique cet élément avec javascript,
  • Les attributs width et height définissent la largeur et la hauteur du canvas,
  • la balise fermante </canvas> est obligatoire.

Le contexte de rendu

L'élément <canvas> crée une surface vide pour dessiner à grandeur fixe selon un ou plusieurs contextes de rendu. Ici nous utiliserons le contexte de rendu 2D.

Pour afficher quelque chose, le script javascript doit :

<canvas id="mon_canvas" width="350" height="350">
   Canvas non supporté par votre navigateur !
</canvas>
<script>
var canvas = document.getElementById('mon_canvas');
var ctx = canvas.getContext('2d');
</script>

Le système de coordonnées

Un canvas est un espace de pixels initialement transparents sue lequel vous pouvez dessiner des formes, mettre des images et les animer.

Lignes et tracés

Pour réaliser un tracé, il faut utiliser les méthodes suivantes :

ctx.beginPath();      // Début du chemin
ctx.moveTo(50,50);    // Le tracé part du point 50,50
ctx.lineTo(200,200);  // Un segment est ajouté vers 200,200
ctx.moveTo(200,50);   // Puis on saute jusqu'à 200,50
ctx.lineTo(50,200);   // Puis on trace jusqu'à 50,200
ctx.closePath(); 

Pour afficher le résultat il faut maintenant préciser les couleurs, le style de trait ou de remplissage :

ctx.stroke();

Cela affiche le tracé avec les couleurs par défaut. <html> <iframe src=“https://trinket.io/embed/html/ff0613b445” width=“100%” height=“400” frameborder=“0” marginwidth=“0” marginheight=“0” allowfullscreen></iframe> </html> Pour modifier les styles par défaut :

// Triangle
ctx.beginPath();      // Début du chemin
ctx.moveTo(150,80);   // Le tracé part du point 150,80
ctx.lineTo(300,230);  // Un segment est ajouté vers 300,230
ctx.lineTo(150,230);  // Un segment est ajouté vers 150,230
ctx.closePath();      // Fermeture du chemin
ctx.fillStyle = "lightblue"; // Définition de la couleur de remplissage
ctx.strokeStyle = "sienna"; // Définition de la couleur de contour
ctx.lineWidth = 5; 
ctx.fill();           // Remplissage du dernier chemin tracé
ctx.stroke();          // Application du contour

<html> <iframe src=“https://trinket.io/embed/html/148a2abf74” width=“100%” height=“400” frameborder=“0” marginwidth=“0” marginheight=“0” allowfullscreen></iframe> </html>

Dessiner des formes

Pour dessiner un Carré ou un rectangle on précise :

fillRect(startx, starty, hauteur, largeur)

Effacer une portion de surface ou tout le canvas

clearRect(startx, starty, hauteur, largeur)

Arc de cercle

Deux méthodes sont disponibles :

arc( x, y, radius, startAngle, endAngle, sensAntiHoraire )

Les angles sont définis en radians avec Math.PI (un tour complet de cercle = 2*Math.PI) et le sens de rotation est contraire aux aiguilles d'une montre lorsqu'il vaut true.

ctx.arc(150,150,100,0,Math.PI*2,true);

les Images

Il faut utiliser :

var image = new Image(); 
image.src = 'hat.jpg';
image.onload = function() {
  // Cette fonction est appelée lorsque l'image a été chargée
  ctx.drawImage(this,50,50); // this fait référence à l'objet courant (=image)
};

<html> <iframe src=“https://trinket.io/embed/html/350bd0a158” width=“100%” height=“600” frameborder=“0” marginwidth=“0” marginheight=“0” allowfullscreen></iframe> </html>

RessourcesLes premières balises utile pour le HTML

Voici deux liens parmi d'autres pour découvrir l'utilisation des Canvas en HTML 5 :

Activité Les langages pour créer des sites Web ...