Dans ce chapitre je montre comment insérer et styler du texte dans un canevas.
La balise canvas définit un repère de 300 par 300 ; l'attribut ID est absent ; une règle de style
en ligne pour un affichage 'responsive'.
Comme l'attribut ID n'a pas été utilisé ; je suis obligé de repérer le premier canvas par son rang.
La méthode querySelector('canvas') sélectionne la premier élément canvas de la page web.
Chaque mot se répartit horizontalement et verticalement autour de son point de référence car textAlign= 'center'
et textBaseline= 'middle'
Le texte est stylé grâce au raccourci font qui fonctionne exactement comme ce raccourci du même nom en CSS.
Les valeurs de shadowOffsetX & shadowOffsetY peuvent être négatives.
Les quatres propriétés shadowColor, shadowOffsetX, shadowOffsetY, shadowBlur permettent non seulement d'ombrer le texte
mais aussi les formes comme je le montre dans le canevas ci-dessous.
Les six formes géométriques sont ombrées.
La balise canvas définit un repère de 400 par 400 ; l'attribut ID est absent ; une règle
de style en ligne pour un affichage 'responsive'.
Comme l'attribut ID est absent je suis obligé de sélectionner le deuxième canvas par son rang avec
la méthode document.querySelectorAll(sélecteur CSS)[indice].
Les quatre propriétés shadowColor, shadowOffsetX, shadowOffsetY, shadowBlur - applicables au contexe - permettent
non seulement d'ombrer du texte mais aussi les formes.
Remarquez que les trois formes géométriques sont définies grâce au constructeur Path2D()
et que la dernier chemin est défini avec la syntaxe SVG.
Pour ombrer les formes vous pouvez aussi utiliser un filtre avec la fonction drop-shadow().
Canvas - les filtres
Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Canvas : produire du texte - ombrer les formes
Je vous montre également comment ombrer textes et formes.
Insérer du texte dans un canevas
Exemple
Le code correspondant
Le code JS :
function fcanevas1()
{
var canevas = document.querySelector('canvas');
var contexte = canevas.getContext('2d');
var X = canevas.width ;
var Y = canevas.height;
contexte.textAlign ='center';
contexte.textBaseline = 'middle';
contexte.font = " bold italic 80px arial" ;
contexte.fillStyle = 'gold';
contexte.strokeStyle ='gold';
contexte.lineWidth = 5;
contexte.shadowColor = 'grey'; // couleur ombrage
contexte.shadowOffsetX = 10 ;
contexte.shadowOffsetY = 10 ;
contexte.shadowBlur = 10 ;
contexte.fillText('Hello', X/2, Y/3) ;
contexte.strokeText('world',X/2, Y/3*2);
}
fcanevas1();
Les valeurs possibles de la propriété textAlign sont : left / center /right.
Les valeurs possible de la propriété textBaseline sont : top / middle / bottom.
Ce raccourci remplace les propriétés élémentaires suivantes : font-style, font-variant,font-weight, font-size,
font-family.
Exemple : font : italic small-caps bold 24pt Arial ;
Remarque : il faut respecter l'ordre mais il n'est pas obligatoire qu'il y ait toujours 5 valeurs.Propriétés pour l'ombrage du texte :
Les méthodes fillText(texte, x,y) et strokeText(texte,x,y) permettent d'écrire le texte :
Canvas : ombrage de formes
Le canevas
Je définis un modèle de rectangle et le duplique deux fois. Même remarque pour le cercle et le triangle.
Le code correspondant
Le code JS :
function fcanevas2()
{
var canevas = document.querySelectorAll('canvas')[1];
var contexte = canevas.getContext('2d');
contexte.shadowColor = 'grey';
contexte.shadowOffsetX = 10 ;
contexte.shadowOffsetY = 10 ;
contexte.shadowBlur = 10 ;
// créer un premier objet graphique : rectangle1
var rectangle1 = new Path2D();
rectangle1.rect(110, 110, 50, 50);
// créer un deuxième objet graphique : cercle1
var cercle1 = new Path2D();
cercle1.arc(100,35, 25, 0, 2 * Math.PI);
// créer une troisième objet graphique : triangle1
var triangle1 = new Path2D('M200 10 h150 v100 z');
// dessiner ces objets
contexte.fill(rectangle1);
contexte.fill(cercle1);
contexte.fill(triangle1);
// redessiner les trois objets après une translation
contexte.translate(0,150);
contexte.fillStyle ="red";
contexte.fill(rectangle1);
contexte.fill(cercle1);
contexte.fill(triangle1);
}
fcanevas2();
La deuxième balise canvas a le rang 1 dans la collection de ces éléments.
Je n'en dis pas plus pour l'instant ...
Pour en savoir davantage