Accueil

Tutoriel Canvas - sommaire

Vous pouvez me contacter via Facebook (questions, critiques constructives) : page facebook relative à mon site

Canvas : animations basiques

Les animations sont certes basiques.

Variation automatique du rayon d'un cercle

L'animation

Le cercle a un rayon de plus en plus grand puis diminue et le cycle recommence.

Le code correspondant

Le canevas 'responsive' fait 300 par 300.
Le script (extrait) :

	var canevas = ...
	var contexte = canevas.getContext('2d');
	var X = canevas.width ; var Y = canevas.height; 
	var maxi = X/2; 
	var rayon = 10; 
	var variation  = 1 ; 
	contexte.fillStyle	 ='orange'; 
	setInterval(animate,100); 
	function animate()
	{
		contexte.clearRect(0,0, X,Y) ; 
		contexte.beginPath(); 
		contexte.arc(X/2, Y/2,rayon, 0, Math.PI*2);
		contexte.fill(); 
		if (rayon >= maxi) variation = -1 ; 
		if (rayon <= 10) variation = 1 ; 
		rayon  = rayon + variation ; 
	} // fin fonction animate

Au travers de cet exemple simple vous devez comprendre le principe de l'animation automatique dans CANVAS.
Grâce à la fonction setInterval on appelle une fonction nommée animate selon une certaine fréquence (toutes les 100 millisecondes soit 10 fois par seconde).

Dans la fonction animate on efface le précédent rond grâce à la méthode clearRect(0,0,X,Y) puis on crée un nouveau cercle avec un rayon différent.
Dès que le rayon atteint la valeur maxi (moitié de la largeur de Canevas) la variable variation devient égal à -1. Donc la variable rayon est décrémentée.
Dès que le rayon redevient égal à 10 variation redevient égal à +1. Donc la variable rayon est incrémentée.

Variation automatique de la taille d'un carré

L'animation

Le carré est de plus en plus grand et opaque puis de plus en plus petit et transparent ; le cycle recommence.
Mais le carré est toujours centré dans le canevas.

Le code correspondant

Le canevas 'responsive' fait 300 par 300.
Le script (extrait):

var canevas2 = ... var contexte2 = canevas2.getContext('2d'); var X2 = canevas2.width ; var Y2 = canevas2.height; var opacite =0.1; var delta =0.05; contexte2.fillStyle ='olive'; var cote = 10; // valeur initiale du cote du carré noir var variation = 1 ; // valeur initiale de sens de variation var x = (X2-cote)/2 ; var y = (Y2-cote)/2; // coordonnées initiales de l'arête supérieure gauche du carré setInterval(animate2,50); function animate2() { contexte2.clearRect(0, 0, X2, Y2); // effacement canevas contexte2.globalAlpha = opacite; contexte2.fillRect(x, y, cote, cote); // dessinner carré de fond olive if (cote &gt;= X2) {variation = -1 ; delta = -0.01; } if (cote &lt;= 10) {variation = 1 ; delta =0.01; } cote = cote + variation ; //nouvelle cote du carré opacite = opacite + delta; x = (X2-cote)/2 ; y = (Y2-cote)/2 ; // nouvelles coordonnées de l'arête supérieure gauche du carré }

Le script est un peu plus compliqué car il faut calculer à chaque fois les nouvelles coordonnées de l'angle haut gauche du carré afin qu'il soit toujours centré.

Variation de l'opacité et de la taille par le visiteur

Cette fois c'est le visiteur qui par clic successifs change l'aspect du rond.

L'animation

Le rond est d'abord très transparent puis à chaque clic dans le canevas il devient de plus en plus grand et de plus en plus opaque.

Le script correspondant

Ce troisième canevas 'responsive' de la page fait toujours 300 par 300.
Le script (extrait) :

function animate3() { var canevas = document.querySelectorAll('canvas')[2]; var contexte = canevas.getContext('2d'); X = canevas.width; Y = canevas.height; contexte.fillStyle ='purple'; var opacite =0.1; var rayon = 20; var variation = 5 ; var maxi =X/2; var rond = new Path2D(); rond.arc(X/2,Y/2,rayon,0, 2 * Math.PI); contexte.globalAlpha = opacite; contexte.fill(rond); canevas.onclick = function() { contexte.clearRect(0,0,X,Y); rayon = rayon + variation ; if (rayon>=maxi) rayon = maxi; rond.arc(X/2,Y/2,rayon,0, 2 * Math.PI); contexte.fill(rond); opacite = opacite + 0.05; contexte.globalAlpha = opacite; } } // fin fonction animate3 animate3();

J'utilise le constructeur d'objets Path2D pour définir une forme graphique (un rond) en début de script.

Dans ce troisième script de la page on retrouve des variables qui portent le même nom que dans le premier : canevas, contexte, X, Y, rayon, maxi, opacite, variation. Et pourtant il n'y a aucune ambiguïté car ces variables sont définies dans le cadre d'une fonction.