Les zones de dessin de cette page restent vides car JavaScript est désactivé par votre navigateur !

Accueil

Traduction

Tutoriel Canvas - sommaire

Tutoriel Canvas - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Canvas : méthode clearRect() - Canvas et POO

Pourquoi utiliser la balise NOSCRIPT ?

Si vous avez désactivez JavaScript dans votre navigateur, les "toiles" de la page vont s'afficher mais elles vont rester désespérement vides ..
Donc dès que votre page web contient un script, pensez à utiliser le conteneur NOSCRIPT pour afficher un message qui signale éventuellement que ce dernier n'a pu être exécuté.

Le code de la partie HEAD de chaque page devient alors :

La partie HEAD contient aussi le conteneur STYLE, les balises META et TITLE.

La méthode clearRect()

Cette méthode permet un effacement partiel d'une forme.

Exemple 1 : dessiner le drapeau de la Suisse

Votre navigateur ne supporte pas Canvas

Le code correspondant

Commentaire du code

La zone de dessin Canvas fait 400 par 400.

Il faut d'abord créer un carré (200 de côté) centré dans la zone de dessin et rempli de rouge.
Puis il faut effacer une partie du rouge avec deux rectangles d'effacement : méthode clearRect(x,y,largeur, hauteur). Donc ces deux zones retrouvent un fond blanc (couleur de fond de l'élément CANVAS).
La méthode clearRect() efface partiellement la couche supérieure pour retrouver la couche en dessus.
Si vous voulez que la croix du drapeau soit de couleur rose il sufit de rajouter dans la balise CANVAS une règle de style en ligne : ...style ="background : pink;" ...

Vous verrez par la suite que la méthode clearRect() est très utile en matière d'animation.

Un peu de méthode

Mais comment déterminer les coordonnées de l'arête supérieure gauche de chaque rectangle d'effacement ?
Si vous voulez être productif (coder vite et bien) je vous conseille de faire un croquis (sur une feuille de papier millimétrée ou une feuille à petit carreaux) avant de coder proprement dit. Vous éviterez maints tâtonnements ...
Ci-dessous exemple de croquis : canvas croquis

Un deuxième exemple plus complexe

Affichez la console du navigateur afin de lire les résultats d'instructions provisoires.

Nous allons maintenant dessiner le drapeau norvégien !
Le canevas fait 640 par 460 et le drapeau occupe toute la zone de dessin.

Le code correspondant

Je récupère dans les variables X et Y respectivement la largeur (640) et la hauteur (460) de ce deuxième canevas.
Je peux utiliser ces valeurs pour argumenter les méthodes fillRect(), clearRect(), etc.

Canvas et la POO

L'emploi de la POO permet d'obtenir des scripts plus lisibles, plus faciles à maintenir.

Ci-dessous un document HTML comprenant une "toile"

Les rectangles arrondis sont de plus en plus décalés et de plus en plus grands.
J'ai utilisé la POO pour écrire le script.
JavaScript et la POO - notation JSON

Le code du document

La balise CANVAS définit un répère cartésien de 600 par 300.

Le script

Un objet nommé "rectangle" est défini avec la syntaxe JSON. On définit pour cet objet des propriétés et une méthode pour le dessiner.

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

// création d'un objet nommé rectangle 
var rectangle = 
{
  x: 0,
  y: 0,
  w : 100,
  h : 50,
  r : 8, 	//radius
  vx : 12, 	// variation abcisse
  vy : 6, 	// variation ordonnée
  vw : 8,  // variation width
  vh: 4,	// variation height
  vr : 2,	// variation radius
 dessin: function () 
  {
   	ctx.strokeStyle = "navy" ; 
	ctx.lineWidth = '4'; 
    ctx.roundRect(this.x, this.y, this.w, this.h, [this.r]);
	ctx.stroke(); 
   },
}; // fin définition objet rectangle

for (i=0; i<=9; i++)
{
	rectangle.x += rectangle.vx;
	rectangle.y += rectangle.vy;
	rectangle.w +=rectangle.vw ; 
	rectangle.h +=rectangle.vh ; 
	rectangle.r +=rectangle.vr; 
	rectangle.dessin() //appel méthode de l'objet
} // fin for 

Je crée un objet littéral nommé "rectangle" via la notation JSON. Cet objet a 10 propriétés et une méthode (pour le dessiner).
À chaque passage dans la boucle 5 propriétés de l'objet sont actualisées (x,y w,h,r) afin que les rectangles arrondis soient de plus en plus grands et décalés vers le bas et la droite.

Nouvelle version du programme

Il suffit de modifier la définition de l'objet pour modifier radicalement l'apparence du dessin.

Modifiez le script pour que ce dernier produise 10 carrés qui diminuent de 10px à chaque fois avec un décalage de 20 vers la gauche et de 10 le haut ; le radius est toujours égal au quart de la largeur (ou hauteur). En effet le premier carré doit être tout en bas à droite, faire 150 par 150 avec un radius de 150/4

Le rendu :

Remarque :
Je me suis contenté de modifier la définition de l'objet "rectangle" : propriétés & méthode.
Donc la maintenance du script est diablement simplifiée.