Si vous avez désactivé JavaScript sur votre navigateur, les zones de dessin correspondant aux éléments canvas
resteront vides !
Le code de la partie HEAD de chaque page devient alors :
Via cet exemple je vous montre comment réaliser un canevas 'responsive' (qui s'affiche proprement quelque soit l'écran)
et comment utiliser dans le script la méthode clearRect().
Le canevas est centré horizontalement est à une largeur égale à 60% de celle de son parent (BODY).
La propriété width détermine la largeur d'affichage de la toile dans la page ; ici 60% de la largeur
du conteneur parent.
Dans le chapitre précédent les canevas étaient déjà 'responsive'.
Donc je vous ai un peu menti ; concernant le code de l'instruction canvas ; il y avait déjà une règle de
style en ligne : style ="width : 60% ; height : auto;"
Il faut remplir toute la 'toile' de rouge.
Attention ne pensez pas que clearRect() remplit de blanc. Ici la croix est blanche car le fond de la toile
a cette couleur.
Les paramètres des méthodes peuvent être des variables.
Les deux bandes blanches qui se croisent ont une largeur de 1/4 et une longueur de 3/4 du côté.
À vous de le reconstituer.
Je vous communique des extraits, à vous de compléter en fonction de la procédure indiquée.
L'emploi de la POO permet d'obtenir des scripts plus lisibles, plus faciles à maintenir.
Ce document HTML contient un élément canvas.
Les rectangles arrondis sont de plus en plus décalés et de plus en plus grands.
la règle "height : auto" n'est pas obligatoire puisque c'est la valeur par défaut de cette propriété.
Il est orienté POO : on définit un objet "rectangle" avec N propriétés et une méthode..
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.
L'orientation objet d'un script ne le rend pas forcément plus concis mais surtout
il le rend plus lisible.
En vous inspirant du canevas précédent, êtes-vous capable de réaliser
le document HTML ci-dessous ? Le canevas qu'il contient a les mêmes caractéristiques que précédemment.
Les ronds sont de plus en plus petits et sont décalés de la droite et vers le haut.
Depuis peu l'API Canvas propose une technique originale pour créer des objets graphiques et les appeler
N fois.
Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Canevas 'responsive' - méthode clearRect() - Canvas et POO
Dans ce chapitre j'évoque quatre points importants :
Pourquoi utiliser la balise NOSCRIPT ?
Donc dès que votre page web contient un script JS, pensez à utiliser le conteneur NOSCRIPT (dans la partie HEAD)
pour afficher un message d'avertissement à l'internaute.
Structure de la page web
Dessiner le drapeau suisse
Le rendu
Le code correspondant
Le code HTML
Les termes "width & height" apparaissent deux fois dans la balise canvas :
Les attributs width & height définissent quant à eux le repère cartésien de ce canevas. Les formes
se positionnent en fonction de ce repère et de leurs paramètres.
la propriété CSS height est à "auto". Donc la hauteur d'affichage sera liée au ratio largeur/hauteur défini par les attributs
width & height. Ici la toile sera aussi haute que large puisque le ration est 400 par 400 donc 1.
J'espère que vous m'excuserez de ce mensonge à des fins pédagogiques.
Le script pour ce premier canevas
function suisse()
{
var canevas = document.querySelector('canvas');
var contexte = canevas.getContext('2d');
contexte.fillStyle = 'red';
contexte.fillRect(0,0,400,400) ;
contexte.clearRect(150,50,100,300);
contexte.clearRect(50,150,300,100);
}
suisse() ; //appel fonction
Puis il faut effacer par un bande horizontale et par une bande verticale.
Faites un test : rajoutez dans la règle de style de la balise canvas :
style ="... background : yellow; " et observez ...
Le script : autre solution
...
contexte.fillStyle = 'red';
var X = canevas.width; // retourne 400
var Y = canevas.height; // retourne 400
contexte.fillRect(0,0,X,Y) ; // entièreté de la toile remplie de rouge
contexte.clearRect(150,50,X/4,X/4*3);
contexte.clearRect(50,150,X/4*3,X/4);
...
TP : le drapeau norvégien
Le rendu
Le code
L'instruction HTML
Le script
La procédure :
Le script à compléter
function norvege()
{
var canevas = ...
var contexte = ...
var X = ...
var Y = ...
// fond rouge pour toute la toile
contexte.fillStyle = ...
contexte.fillRect(...);
// zones blanches
contexte.clearRect(...);
contexte.clearRect(...);
// zones bleues
contexte.fillStyle =...
contexte.fillRect(...);
contexte.fillRect(...);
}
norvege() ; // appel fonction
Canvas et la POO
Ci-dessous un document HTML inséré via un Iframe dans cette page
Le code HTML du document
Le script dans ce document
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var X = canvas.width;
var Y =canvas.height;
// création d'un objet nommé rectangle
var rectangle =
{
x: 0,
y: 0,
w : X/4,
h : Y/4,
r : 10, //radius
vx : 15, // variation abcisse
vy : 10, // variation ordonnée
vw : 15, // variation width
vh: 10, // 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
Pour dessiner l'objet graphique il suffit d'appeler la méthode qui le dessine : rectangle.dessin().
Pour en savoir davantage sur la notation JSON
Ainsi si vous voulez un empilement de ronds, vous savez qu'il faut modifier la définition de l'objet "rectangle" ;
il faut que le radius soit initialement égal à la moitié du côté donc à X/8.
Il faut que les paramètres x & y soient incrementés de la même valeur et que le radius soit incrémenté de la moitié de cette valeur.
Pour résumer vous ne modifiez que la définition de l'objet.
Travaux pratiques de POO
Le constructeur path2D()
le constructeur Path2D()