HTML - Canevas
Introduction au Canvas HTML
Le Canvas HTML est un élément HTML5 puissant qui vous permet de dessiner des graphiques et de créer des visualisations dynamiques sur des pages web. Il fournit une surface de dessin où vous pouvez rendre des formes, des images, du texte et des animations en utilisant JavaScript. Le Canvas vous donne un contrôle total sur les pixels, vous permettant de créer du contenu interactif et visuellement attrayant.
Pour utiliser le Canvas, vous commencez par ajouter un élément <canvas>
à votre page HTML. L'élément <canvas>
agit comme un conteneur pour la surface de dessin. Vous pouvez définir la largeur et la hauteur du Canvas en utilisant les attributs width
et height
. Par défaut, le Canvas a une largeur de 300 pixels et une hauteur de 150 pixels.
Conseil: Syntaxe de base pour créer un élément Canvas
<canvas id="myCanvas" width="500" height="300"></canvas>
Pour dessiner sur le Canvas, vous devez accéder à son contexte de rendu en utilisant JavaScript. Le contexte de rendu fournit un ensemble de méthodes et de propriétés de dessin que vous pouvez utiliser pour créer et manipuler des graphiques. Vous pouvez obtenir le contexte de rendu en appelant la méthode getContext()
sur l'élément Canvas, en passant '2d' comme argument pour spécifier un contexte de rendu 2D.
Conseil: Accès au contexte de rendu en JavaScript
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
Une fois que vous avez le contexte de rendu, vous pouvez commencer à dessiner sur le Canvas. L'API Canvas offre une large gamme de méthodes pour dessiner des formes, des lignes, des chemins, du texte et des images. Vous pouvez définir des couleurs de remplissage et de contour, appliquer des dégradés et des motifs, et modifier les styles de dessin.
L'un des principaux avantages de l'utilisation du Canvas est sa performance. Le rendu Canvas est rapide et efficace, ce qui le rend approprié pour créer des visualisations complexes, des animations et du contenu interactif. Il vous permet de créer des animations fluides et des mises à jour en temps réel sans dépendre de plugins ou de dépendances externes.
Un autre avantage du Canvas est sa flexibilité. Vous avez un contrôle total sur le processus de dessin, vous permettant de créer des formes, des styles et des effets personnalisés. Le Canvas fournit une API de dessin de bas niveau qui vous donne un contrôle précis sur chaque pixel de la surface de dessin.
Le Canvas est largement pris en charge par les navigateurs web modernes, le rendant accessible à un large public. C'est une fonctionnalité native HTML5, vous n'avez donc pas besoin de plugins ou d'extensions supplémentaires pour l'utiliser.
Dans les sections suivantes, nous examinerons les diverses fonctionnalités et capacités du Canvas HTML, et apprendrons comment créer des graphiques impressionnants et des expériences interactives sur le web.
Configuration d'un Canvas
Pour commencer avec HTML Canvas, vous devez configurer un élément Canvas dans votre page HTML. L'élément Canvas est un conteneur pour la surface de dessin où vous créerez vos graphiques et visualisations.
Pour créer un élément Canvas, vous utilisez la balise <canvas>
dans votre balisage HTML. La balise <canvas>
est une balise auto-fermante, vous n'avez donc pas besoin d'une balise de fermeture séparée.
Conseil: Création d'un élément Canvas
<canvas id="monCanvas"></canvas>
Nous avons créé un élément Canvas avec un attribut id
défini sur "monCanvas". L'attribut id
n'est pas obligatoire, mais c'est une bonne idée de donner à votre élément Canvas un id
pour pouvoir y faire référence facilement en utilisant JavaScript plus tard.
Par défaut, l'élément Canvas a une largeur de 300 pixels et une hauteur de 150 pixels. Cependant, vous pouvez modifier la taille du Canvas en spécifiant les attributs width
et height
.
Conseil: Spécification de la largeur et de la hauteur du Canvas
<canvas id="monCanvas" width="500" height="300"></canvas>
Nous avons défini la width
à 500 pixels et la height
à 300 pixels. Vous pouvez ajuster ces valeurs en fonction de vos besoins.
L'élément Canvas lui-même n'est qu'un conteneur et n'a pas de capacités de dessin. Pour dessiner réellement sur le Canvas, vous devez accéder à son contexte de rendu en utilisant JavaScript.
Pour accéder au contexte du Canvas, vous devez d'abord obtenir une référence à l'élément Canvas dans votre code JavaScript. Vous pouvez le faire en utilisant la méthode document.getElementById()
et en passant l'id
de votre élément Canvas.
Conseil: Accès à l'élément Canvas en JavaScript
const canvas = document.getElementById('monCanvas');
Une fois que vous avez la référence de l'élément Canvas, vous pouvez accéder à son contexte de rendu en appelant la méthode getContext()
sur l'élément Canvas. Vous devez passer la chaîne '2d' comme argument pour spécifier que vous voulez un contexte de rendu 2D.
Conseil: Accès au contexte du Canvas
const ctx = canvas.getContext('2d');
La variable ctx
contient maintenant une référence au contexte de rendu 2D du Canvas. Vous pouvez utiliser ce contexte pour effectuer diverses opérations de dessin, comme dessiner des formes, des chemins, du texte et des images sur le Canvas.
Avec l'élément Canvas configuré et le contexte de rendu accessible, vous êtes prêt à commencer à dessiner sur le Canvas. Dans les sections suivantes, nous verrons comment dessiner différentes formes, appliquer des couleurs et des dégradés, rendre du texte, travailler avec des images et créer des animations en utilisant l'API Canvas.
Dessiner des formes et des chemins
Le Canvas fournit des méthodes pour dessiner des formes et des chemins. Voyons comment dessiner des rectangles, des lignes, des arcs et des cercles sur le Canvas.
Pour dessiner un rectangle, vous pouvez utiliser la méthode fillRect()
ou strokeRect()
. La méthode fillRect()
dessine un rectangle plein, tandis que strokeRect()
dessine le contour d'un rectangle.
Conseil: Dessiner un rectangle plein
ctx.fillStyle = 'blue';
ctx.fillRect(50, 50, 200, 100);
Nous avons défini la couleur de remplissage en bleu en utilisant la propriété fillStyle
, puis nous avons appelé la méthode fillRect()
. La méthode fillRect()
prend quatre arguments : la coordonnée x du coin supérieur gauche, la coordonnée y du coin supérieur gauche, la largeur et la hauteur du rectangle.
Pour dessiner des lignes et des chemins, vous utilisez une combinaison de méthodes. Tout d'abord, vous appelez la méthode beginPath()
pour commencer un nouveau chemin. Ensuite, vous utilisez des méthodes comme moveTo()
, lineTo()
, et arc()
pour définir le chemin. Enfin, vous appelez stroke()
ou fill()
pour rendre le chemin sur le Canvas.
Conseil: Dessiner un chemin de ligne
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(300, 200);
ctx.stroke();
Nous avons commencé un nouveau chemin avec beginPath()
, déplacé le curseur de dessin au point (100, 100) en utilisant moveTo()
, puis tracé une ligne jusqu'au point (300, 200) en utilisant lineTo()
. Enfin, nous avons appelé stroke()
pour dessiner la ligne sur le Canvas.
Pour dessiner des arcs et des cercles, vous pouvez utiliser la méthode arc()
. La méthode arc()
prend six arguments : la coordonnée x du centre, la coordonnée y du centre, le rayon, l'angle de départ (en radians), l'angle de fin (en radians), et une valeur booléenne optionnelle indiquant s'il faut dessiner l'arc dans le sens inverse des aiguilles d'une montre.
Conseil: Dessiner un cercle
ctx.beginPath();
ctx.arc(200, 200, 100, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();
Nous avons dessiné un cercle avec un centre à (200, 200) et un rayon de 100 pixels. Nous avons utilisé beginPath()
pour commencer un nouveau chemin, appelé arc()
pour définir le cercle, défini la couleur de remplissage en rouge avec fillStyle
, puis appelé fill()
pour remplir le cercle de couleur.
Vous pouvez styliser vos formes et chemins en définissant des propriétés avant d'appeler les méthodes de dessin. Voici quelques propriétés de style courantes :
Propriété | Description |
---|---|
fillStyle |
Définit la couleur de remplissage pour les formes. |
strokeStyle |
Définit la couleur pour les contours et les chemins. |
lineWidth |
Définit la largeur des lignes et des contours de chemins. |
lineCap |
Définit le style des extrémités de ligne (ex: butt, round, square). |
lineJoin |
Définit le style des jonctions de ligne (ex: miter, round, bevel). |
Conseil: Styliser et dessiner un rectangle
ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';
ctx.strokeStyle = 'blue';
ctx.lineWidth = 5;
ctx.fillRect(50, 50, 200, 100);
ctx.strokeRect(50, 50, 200, 100);
Nous avons défini la couleur de remplissage en rouge semi-transparent avec fillStyle
, défini la couleur du trait en bleu avec strokeStyle
, et défini la largeur de ligne à 5 pixels avec lineWidth
. Ensuite, nous avons dessiné un rectangle plein avec fillRect()
et un rectangle contour avec strokeRect()
.
En combinant différentes formes, chemins et techniques de style, vous pouvez créer des graphiques complexes et attrayants sur le Canvas. Essayez différentes méthodes et propriétés pour obtenir les résultats souhaités.
Travailler avec les couleurs et les dégradés
Dans le Canvas HTML, vous pouvez ajouter des couleurs et des dégradés à vos dessins. Voyons comment travailler avec les couleurs et les dégradés dans Canvas.
Pour définir la couleur de remplissage des formes, vous utilisez la propriété fillStyle
du contexte de rendu. La propriété fillStyle
accepte une valeur de couleur, qui peut être une chaîne utilisant des noms de couleurs, des valeurs hexadécimales, des valeurs RGB ou des valeurs RGBA pour la transparence.
Conseil: Définition des couleurs de remplissage
ctx.fillStyle = 'red';
ctx.fillStyle = '#FF0000';
ctx.fillStyle = 'rgb(255, 0, 0)';
ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';
Pour définir la couleur du contour pour les lignes et les chemins, vous utilisez la propriété strokeStyle
. Elle fonctionne de la même manière que fillStyle
et accepte les mêmes formats de valeurs de couleur.
Conseil: Définition des couleurs de contour
ctx.strokeStyle = 'blue';
ctx.strokeStyle = '#0000FF';
ctx.strokeStyle = 'rgb(0, 0, 255)';
ctx.strokeStyle = 'rgba(0, 0, 255, 0.5)';
Canvas prend également en charge les dégradés, qui vous permettent de créer des transitions de couleurs. Il existe deux types de dégradés dans Canvas : les dégradés linéaires et les dégradés radiaux.
Pour créer un dégradé linéaire, vous utilisez la méthode createLinearGradient()
. Elle prend quatre arguments : la coordonnée x de départ, la coordonnée y de départ, la coordonnée x de fin et la coordonnée y de fin.
Conseil: Création d'un dégradé linéaire
const gradient = ctx.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'blue');
Nous avons créé un dégradé linéaire qui commence à (0, 0) et se termine à (200, 0). Nous avons ensuite ajouté des arrêts de couleur au dégradé en utilisant la méthode addColorStop()
. La méthode addColorStop()
prend deux arguments : la position de l'arrêt de couleur (entre 0 et 1) et la valeur de la couleur.
Pour créer un dégradé radial, vous utilisez la méthode createRadialGradient()
. Elle prend six arguments : la coordonnée x du centre du cercle de départ, la coordonnée y du centre du cercle de départ, le rayon du cercle de départ, la coordonnée x du centre du cercle de fin, la coordonnée y du centre du cercle de fin et le rayon du cercle de fin.
Conseil: Création d'un dégradé radial
const gradient = ctx.createRadialGradient(100, 100, 0, 100, 100, 100);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'blue');
Nous avons créé un dégradé radial avec le cercle de départ centré à (100, 100) avec un rayon de 0, et le cercle de fin centré à (100, 100) avec un rayon de 100. Nous avons ajouté des arrêts de couleur au dégradé en utilisant addColorStop()
.
Une fois que vous avez créé un dégradé, vous pouvez l'appliquer aux formes en l'assignant à la propriété fillStyle
ou strokeStyle
.
Conseil: Application d'un dégradé à une forme
const gradient = ctx.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'blue');
ctx.fillStyle = gradient;
ctx.fillRect(50, 50, 200, 100);
Nous avons créé un dégradé linéaire, l'avons assigné à la propriété fillStyle
, puis avons dessiné un rectangle rempli en utilisant fillRect()
. Le rectangle sera rempli avec les couleurs du dégradé.
Dessiner du texte sur un Canvas
Le Canvas vous permet de dessiner du texte sur la surface de dessin, vous donnant la possibilité de créer des étiquettes, des légendes et d'autres éléments textuels dans vos graphiques. Voyons comment afficher et styler du texte sur le Canvas.
Pour afficher du texte sur le Canvas, vous utilisez la méthode fillText()
ou strokeText()
. La méthode fillText()
dessine du texte plein, tandis que strokeText()
dessine le contour du texte.
Conseil: Afficher et styler du texte
ctx.font = '24px Arial';
ctx.fillText('Bonjour, Canvas !', 100, 100);
ctx.strokeText('Bonjour, Canvas !', 100, 150);
Avant de dessiner le texte, nous définissons le style et la taille de la police en utilisant la propriété font
. La propriété font
prend une valeur de type chaîne qui inclut la taille et la famille de la police, similaire à la propriété CSS font
.
Les méthodes fillText()
et strokeText()
prennent trois arguments : le texte à afficher, la coordonnée x de la position de départ du texte, et la coordonnée y de la ligne de base du texte.
Vous pouvez styler davantage le texte en modifiant diverses propriétés du contexte de rendu.
Propriété | Description |
---|---|
font |
Définit le style, la taille et la famille de la police du texte. |
textAlign |
Définit l'alignement horizontal du texte (gauche, centre, droite). |
textBaseline |
Définit l'alignement vertical du texte (haut, milieu, bas). |
fillStyle |
Définit la couleur de remplissage du texte. |
strokeStyle |
Définit la couleur du contour du texte. |
Conseil: Texte stylé
ctx.font = 'bold 36px Times New Roman';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillStyle = 'blue';
ctx.fillText('Texte stylé', 200, 100);
Nous avons défini la police en Times New Roman gras de 36px, aligné le texte horizontalement au centre et verticalement au milieu, et défini la couleur de remplissage en bleu avec fillStyle
. Le texte "Texte stylé" est ensuite affiché à la position (200, 100).
Vous pouvez appliquer à la fois les styles de remplissage et de contour au texte en appelant fillText()
et strokeText()
avec le même texte et la même position.
Conseil: Texte rempli et contouré
ctx.font = '48px Georgia';
ctx.fillStyle = 'red';
ctx.strokeStyle = 'black';
ctx.lineWidth = 2;
ctx.fillText('Rempli et contouré', 100, 100);
ctx.strokeText('Rempli et contouré', 100, 100);
Nous avons défini la police en Georgia de 48px, la couleur de remplissage en rouge, la couleur du contour en noir, et la largeur de ligne à 2 pixels. Nous avons ensuite appelé fillText()
et strokeText()
pour appliquer à la fois les styles de remplissage et de contour au texte.
Parfois, vous pourriez avoir besoin de mesurer la taille du texte avant de le dessiner sur le Canvas. La méthode measureText()
vous permet d'obtenir la largeur du texte affiché.
Conseil: Mesurer le texte
ctx.font = '24px Arial';
const text = 'Mesurez-moi';
const metrics = ctx.measureText(text);
const width = metrics.width;
console.log('Largeur du texte:', width);
Nous avons défini le style et la taille de la police avec font
, puis appelé measureText()
avec le texte que nous voulons mesurer. La méthode measureText()
renvoie un objet TextMetrics
qui contient la propriété width
, représentant la largeur du texte affiché en pixels.
Gardez à l'esprit que la méthode measureText()
ne fournit que la largeur du texte. Il n'existe pas de moyen intégré pour mesurer directement la hauteur du texte. Cependant, vous pouvez estimer la hauteur en fonction de la taille de la police ou utiliser des bibliothèques externes qui offrent des capacités de mesure de texte plus avancées.
En combinant les techniques de rendu, de stylisation et de mesure du texte, vous pouvez créer des éléments textuels informatifs et attrayants dans vos dessins Canvas.
Manipulation d'images sur Canvas
Canvas offre des fonctionnalités pour travailler avec des images, vous permettant de dessiner, manipuler et appliquer des effets aux images sur la surface de dessin. Voyons comment manipuler des images sur le Canvas.
Pour dessiner une image sur le Canvas, vous utilisez la méthode drawImage()
. La méthode drawImage()
prend une source d'image et les coordonnées de destination sur le Canvas où l'image doit être dessinée.
Conseil: Dessiner une image
const img = new Image();
img.src = 'chemin/vers/image.jpg';
img.onload = function() {
ctx.drawImage(img, 100, 100);
};
Nous avons créé un nouvel objet Image
et défini sa propriété src
avec le chemin ou l'URL du fichier image. Nous avons ensuite attaché un gestionnaire d'événement onload
à l'image, qui est déclenché lorsque l'image est chargée. Dans le gestionnaire d'événement, nous avons appelé la méthode drawImage()
, en passant l'objet image et les coordonnées de destination (100, 100) sur le Canvas.
La méthode drawImage()
a plusieurs surcharges qui vous permettent de spécifier les dimensions source et de destination pour mettre à l'échelle et redimensionner l'image.
Conseil: Mise à l'échelle d'une image
ctx.drawImage(img, 100, 100, 200, 150);
Nous avons spécifié les coordonnées de destination (100, 100) et la largeur et la hauteur (200, 150) auxquelles l'image doit être mise à l'échelle. L'image sera dessinée sur le Canvas à la position spécifiée et redimensionnée pour s'adapter aux dimensions données.
Vous pouvez également spécifier les dimensions source de l'image pour recadrer ou découper une portion de l'image.
Conseil: Recadrage d'une image
ctx.drawImage(img, 50, 50, 100, 100, 200, 200, 150, 150);
Nous avons spécifié les coordonnées source (50, 50) et les dimensions (100, 100) pour recadrer une portion de l'image. Ensuite, nous avons spécifié les coordonnées de destination (200, 200) et les dimensions (150, 150) pour dessiner la portion recadrée sur le Canvas.
Canvas vous permet également d'appliquer des filtres et des effets aux images en utilisant la propriété globalCompositeOperation
et divers modes de composition.
Conseil: Application de filtres
ctx.globalCompositeOperation = 'multiply';
ctx.drawImage(img, 100, 100);
Nous avons défini la propriété globalCompositeOperation
sur 'multiply', ce qui multiplie les couleurs des pixels de l'image avec les couleurs des pixels existants sur le Canvas. Cela crée un effet d'assombrissement. Vous pouvez essayer différents modes de composition comme 'overlay', 'screen', 'lighten', 'darken', etc., pour obtenir divers effets.
Vous pouvez utiliser les méthodes getImageData()
et putImageData()
pour accéder et manipuler les données de pixels d'une image sur le Canvas.
Conseil: Manipulation des données de pixels
const imageData = ctx.getImageData(100, 100, 200, 150);
// Manipuler les données de pixels
// ...
ctx.putImageData(imageData, 100, 100);
Nous avons utilisé getImageData()
pour obtenir les données de pixels d'une région spécifique du Canvas où l'image est dessinée. La méthode getImageData()
retourne un objet ImageData
qui contient les données de pixels sous forme de tableau. Vous pouvez manipuler les données de pixels en accédant et en modifiant les valeurs du tableau. Nous avons utilisé putImageData()
pour remettre les données de pixels modifiées sur le Canvas aux coordonnées spécifiées.
En combinant ces techniques, vous pouvez créer des effets, appliquer des filtres et manipuler des images sur le Canvas. Essayez différentes méthodes et propriétés pour obtenir les résultats souhaités pour votre cas d'utilisation spécifique.
Animations et Interactivité
Le Canvas offre des fonctionnalités pour créer des animations et ajouter de l'interactivité à vos dessins. Voyons comment créer des animations simples, animer des formes et des chemins, gérer les interactions utilisateur et mettre en place la détection de collision.
Pour créer des animations simples sur le Canvas, vous devez effacer le Canvas et redessiner les graphiques mis à jour. Vous pouvez utiliser la méthode clearRect()
pour effacer une zone spécifique du Canvas ou le Canvas entier.
Conseil: Animation Simple
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Dessiner les graphiques mis à jour
// ...
requestAnimationFrame(animate);
}
animate();
Nous avons défini une fonction animate
qui efface tout le Canvas en utilisant clearRect()
puis dessine les graphiques mis à jour. Nous avons utilisé requestAnimationFrame()
pour appeler la fonction animate
de manière répétée, créant ainsi une boucle d'animation.
Pour animer des formes et des chemins, vous pouvez mettre à jour leurs propriétés ou positions dans chaque image de l'animation.
Conseil: Animer des Formes et des Chemins
let x = 0;
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.arc(x, 100, 50, 0, 2 * Math.PI);
ctx.fill();
x += 2;
requestAnimationFrame(animate);
}
animate();
Nous avons défini une variable x
pour suivre la position horizontale d'un cercle. Dans la fonction animate
, nous avons effacé le Canvas, dessiné le cercle à la position x
mise à jour en utilisant arc()
, puis augmenté la valeur de x
de 2 à chaque image. Cela crée une animation du cercle se déplaçant de gauche à droite.
Le Canvas vous permet également de gérer les interactions utilisateur, comme les événements de souris, pour créer des dessins interactifs.
Conseil: Gérer les Interactions Utilisateur
canvas.addEventListener('mousemove', function(event) {
const rect = canvas.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
// Gérer le mouvement de la souris
// ...
});
Nous avons ajouté un écouteur d'événements mousemove
à l'élément Canvas. Dans l'écouteur d'événements, nous avons calculé les coordonnées de la souris par rapport au Canvas en utilisant getBoundingClientRect()
et les propriétés clientX
et clientY
de l'objet événement. Vous pouvez ensuite utiliser ces coordonnées pour mettre à jour le dessin en fonction de la position de la souris.
La détection de collision est un autre aspect important de l'interactivité. Vous pouvez implémenter la détection de collision pour vérifier si des formes ou des chemins se croisent ou se chevauchent.
Conseil: Détection de Collision
function isColliding(rect1, rect2) {
return (
rect1.x < rect2.x + rect2.width &&
rect1.x + rect1.width > rect2.x &&
rect1.y < rect2.y + rect2.height &&
rect1.y + rect1.height > rect2.y
);
}
Nous avons défini une fonction isColliding
qui prend deux objets rectangles (rect1
et rect2
) et vérifie s'ils sont en collision. La fonction compare les coordonnées et les dimensions des rectangles pour déterminer s'ils se chevauchent. Vous pouvez utiliser cette fonction pour détecter les collisions entre les formes ou les objets dans vos animations Canvas.
En combinant animations, interactions utilisateur et détection de collision, vous pouvez créer des expériences Canvas dynamiques et interactives. Essayez différentes techniques et expérimentez avec diverses propriétés et méthodes pour donner vie à vos dessins.
N'oubliez pas d'utiliser requestAnimationFrame()
pour les animations et d'optimiser votre code pour que les animations s'exécutent avec de bonnes performances.
Techniques avancées de Canvas
Canvas offre des techniques avancées qui vous permettent de créer des graphiques complexes et dynamiques. Examinons certaines de ces techniques, notamment la sauvegarde et la restauration de l'état du Canvas, l'application de transformations, l'utilisation de la composition et du découpage, et l'ajout de zones de détection.
La sauvegarde et la restauration de l'état du Canvas sont utiles lorsque vous souhaitez appliquer des modifications temporaires au Canvas sans affecter l'ensemble du dessin. La méthode save()
enregistre l'état actuel du Canvas, y compris les styles, les transformations et les zones de découpage, dans une pile. La méthode restore()
récupère l'état le plus récemment sauvegardé de la pile et restaure le Canvas à cet état.
Conseil: Sauvegarde et restauration de l'état du Canvas
ctx.fillStyle = 'blue';
ctx.save();
ctx.fillStyle = 'red';
ctx.fillRect(50, 50, 100, 100);
ctx.restore();
ctx.fillRect(200, 50, 100, 100);
Nous avons défini la couleur de remplissage initiale sur bleu en utilisant fillStyle
. Ensuite, nous avons appelé save()
pour sauvegarder l'état actuel. Nous avons changé la couleur de remplissage en rouge et dessiné un rectangle rouge en utilisant fillRect()
. Après cela, nous avons appelé restore()
pour restaurer l'état précédemment sauvegardé, qui avait la couleur de remplissage définie sur bleu. Enfin, nous avons dessiné un autre rectangle, qui utilise la couleur de remplissage bleue restaurée.
Canvas fournit des méthodes pour appliquer des transformations au contexte de dessin. Les transformations vous permettent de déplacer, faire pivoter et redimensionner le système de coordonnées du Canvas.
La méthode translate()
déplace l'origine du Canvas d'une quantité spécifiée. La méthode rotate()
fait pivoter le Canvas d'un angle spécifié (en radians). La méthode scale()
redimensionne le Canvas selon un facteur spécifié.
Conseil: Application de transformations
ctx.translate(100, 100);
ctx.rotate(Math.PI / 4);
ctx.scale(1.5, 1.5);
ctx.fillRect(0, 0, 100, 100);
Nous avons déplacé l'origine du Canvas de (100, 100) en utilisant translate()
, fait pivoter le Canvas de 45 degrés (π/4 radians) en utilisant rotate()
, et redimensionné le Canvas d'un facteur de 1,5 en utilisant scale()
. Ensuite, nous avons dessiné un rectangle à la nouvelle origine (0, 0) avec les transformations appliquées.
La composition et le découpage sont des techniques avancées pour contrôler comment les formes et les images sont combinées et affichées sur le Canvas.
La propriété globalCompositeOperation
détermine comment les nouvelles formes ou images sont composées avec le contenu existant sur le Canvas. Elle vous permet de spécifier différents modes de composition, tels que 'source-over' (par défaut), 'destination-over', 'lighter', 'xor', etc.
Conseil: Composition de formes
ctx.globalCompositeOperation = 'xor';
ctx.fillStyle = 'blue';
ctx.fillRect(50, 50, 100, 100);
ctx.fillStyle = 'red';
ctx.fillRect(100, 100, 100, 100);
Nous avons défini globalCompositeOperation
sur 'xor', qui effectue une opération OU exclusif entre la nouvelle forme et le contenu existant. Nous avons dessiné un rectangle bleu puis un rectangle rouge qui chevauche le bleu. La zone de chevauchement sera le résultat de l'opération XOR.
Le découpage est une technique qui limite la zone de dessin à une région spécifique. Vous pouvez créer une région de découpage en utilisant des chemins, puis dessiner uniquement dans cette région.
Conseil: Région de découpage
ctx.beginPath();
ctx.arc(150, 150, 100, 0, 2 * Math.PI);
ctx.clip();
ctx.fillRect(100, 100, 200, 200);
Nous avons créé une région de découpage circulaire en utilisant beginPath()
, arc()
, et clip()
. Ensuite, nous avons dessiné un rectangle en utilisant fillRect()
, mais seule la partie du rectangle qui se trouve dans la région de découpage circulaire sera visible.
Les zones de détection sont des zones sur le Canvas qui répondent aux interactions de l'utilisateur, comme les clics de souris ou les touches. Vous pouvez ajouter des zones de détection en définissant des chemins ou des formes et en vérifiant si le point d'interaction de l'utilisateur se trouve dans ces régions.
Conseil: Ajout de zones de détection
canvas.addEventListener('click', function(event) {
const rect = canvas.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
ctx.beginPath();
ctx.arc(150, 150, 100, 0, 2 * Math.PI);
if (ctx.isPointInPath(x, y)) {
console.log('Clic à l\'intérieur du cercle');
}
});
Nous avons ajouté un écouteur d'événements click
au Canvas. À l'intérieur de l'écouteur d'événements, nous avons calculé les coordonnées du clic par rapport au Canvas. Nous avons ensuite créé un chemin circulaire en utilisant beginPath()
et arc()
. Nous avons utilisé la méthode isPointInPath()
pour vérifier si le point de clic se trouve dans le chemin circulaire. Si c'est le cas, nous affichons un message indiquant que le clic s'est produit à l'intérieur du cercle.
Ces techniques avancées de Canvas fournissent des outils pour créer des graphiques sophistiqués, des animations et des expériences interactives. Essayez d'utiliser différentes combinaisons de ces techniques pour exploiter pleinement le potentiel de HTML Canvas dans vos projets.
Intégration du Canvas avec d'autres éléments HTML
Le Canvas est un élément polyvalent qui peut être intégré à d'autres éléments HTML pour créer des pages web interactives et dynamiques. Examinons comment vous pouvez utiliser le Canvas avec des formulaires et des entrées, superposer le Canvas sur d'autres éléments, et communiquer entre le Canvas et JavaScript.
L'utilisation du Canvas avec des formulaires et des entrées est un scénario courant où vous souhaitez capturer les entrées de l'utilisateur et les utiliser pour mettre à jour le dessin du Canvas. Vous pouvez y parvenir en combinant le Canvas avec des éléments de formulaire HTML tels que des champs de texte, des cases à cocher, des boutons radio ou des menus déroulants.
Conseil: Canvas avec entrée de formulaire
<input type="range" id="sizeSlider" min="1" max="100" value="10">
<canvas id="myCanvas"></canvas>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const sizeSlider = document.getElementById('sizeSlider');
sizeSlider.addEventListener('input', function() {
const size = parseInt(sizeSlider.value);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillRect(100, 100, size, size);
});
Nous avons ajouté une entrée de type range (<input type="range">
) avec un id
"sizeSlider". Nous avons également un élément Canvas avec un id
"myCanvas". Dans le code JavaScript, nous avons obtenu des références au Canvas et à l'entrée range. Nous avons ajouté un écouteur d'événements à l'entrée range qui écoute l'événement 'input', qui se déclenche chaque fois que la valeur du curseur change. Dans l'écouteur d'événements, nous avons obtenu la valeur actuelle du curseur, effacé le Canvas, et dessiné un rectangle dont la taille est déterminée par la valeur du curseur.
Le Canvas peut également être superposé à d'autres éléments HTML pour créer des designs en couches et interactifs. En positionnant l'élément Canvas à l'aide de CSS, vous pouvez le placer au-dessus ou en dessous d'autres éléments de la page.
Conseil: Superposition du Canvas sur une image
<div style="position: relative;">
<img src="path/to/image.jpg" alt="Image de fond">
<canvas id="myCanvas" style="position: absolute; top: 0; left: 0;"></canvas>
</div>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// Dessiner sur le Canvas
// ...
Nous avons créé un élément <div>
avec un positionnement relatif. À l'intérieur du <div>
, nous avons un élément <img>
qui affiche une image de fond. Nous avons également un élément Canvas positionné de manière absolue à l'intérieur du <div>
, avec ses coordonnées top et left définies à 0. Cela fait que le Canvas se superpose à l'image. Dans le code JavaScript, nous pouvons dessiner sur le Canvas comme d'habitude, et les dessins apparaîtront au-dessus de l'image de fond.
La communication entre le Canvas et JavaScript est importante pour créer des expériences interactives. Vous pouvez utiliser JavaScript pour modifier le Canvas, mettre à jour son contenu en fonction des actions de l'utilisateur, ou obtenir des données du Canvas.
Conseil: Communication entre le Canvas et JavaScript
<button id="exportButton">Exporter le Canvas</button>
<canvas id="myCanvas"></canvas>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const exportButton = document.getElementById('exportButton');
// Dessiner sur le Canvas
// ...
exportButton.addEventListener('click', function() {
const dataURL = canvas.toDataURL();
console.log('Canvas exporté sous forme de:', dataURL);
});
Nous avons ajouté un élément bouton avec un id
"exportButton". Dans le code JavaScript, nous avons obtenu des références au Canvas et au bouton. Nous avons ajouté un écouteur d'événements de clic au bouton. Lorsque le bouton est cliqué, nous avons utilisé la méthode toDataURL()
du Canvas pour obtenir une représentation en URL de données du contenu du Canvas. Nous avons ensuite affiché l'URL de données dans la console. Cela montre comment vous pouvez obtenir des données du Canvas et les utiliser dans votre code JavaScript.
Applications et exemples concrets
Le Canvas HTML a de nombreuses applications dans des scénarios réels, permettant aux développeurs de créer des expériences web interactives et visuellement attrayantes. Examinons certains des cas d'utilisation courants et des exemples de Canvas en action.
Création de jeux interactifs
La création de jeux interactifs est l'une des applications populaires du Canvas. Avec sa capacité à rendre des graphiques et à gérer les interactions des utilisateurs, Canvas fournit une base solide pour créer des jeux 2D captivants. Les développeurs peuvent utiliser Canvas pour dessiner des objets de jeu, les animer et gérer la détection des collisions. En combinant Canvas avec JavaScript, il est possible de créer des mécaniques de jeu interactives, des simulations physiques et des contrôles utilisateur réactifs. Des jeux de puzzle simples aux jeux de plateforme et de style arcade plus complexes, Canvas offre la flexibilité et les performances nécessaires pour des expériences de jeu fluides.
Création de visualisations de données et de graphiques
Canvas est aussi largement utilisé pour créer des visualisations de données et des graphiques. Ses capacités de dessin le rendent bien adapté pour rendre divers types de graphiques, notamment :
Type de graphique |
---|
Graphiques linéaires |
Graphiques à barres |
Graphiques circulaires |
Avec Canvas, les développeurs peuvent générer dynamiquement des graphiques basés sur des ensembles de données, permettant des mises à jour en temps réel et une exploration interactive. En utilisant des bibliothèques comme Chart.js ou des implémentations personnalisées, les développeurs peuvent créer des visualisations de données visuellement attrayantes et informatives qui aident les utilisateurs à comprendre des ensembles de données complexes.
Mise en œuvre d'outils d'édition d'images
Une autre application de Canvas est la mise en œuvre d'outils d'édition d'images. Canvas fournit un ensemble puissant de méthodes pour manipuler les images au niveau du pixel. Les développeurs peuvent utiliser Canvas pour appliquer des filtres, des effets et des transformations aux images directement dans le navigateur. Cela ouvre des possibilités pour créer des applications d'édition d'images basées sur le web, des outils de manipulation de photos et même des traitements d'image en temps réel. Avec Canvas, les utilisateurs peuvent :
- Recadrer des images
- Ajuster la luminosité et le contraste
- Appliquer des filtres de couleur
- Effectuer d'autres opérations d'édition d'image avancées sans nécessiter de traitement côté serveur
Développement d'animations et d'effets interactifs
Canvas est également utilisé pour développer des animations et des effets interactifs. Sa capacité à rendre et à manipuler des graphiques en temps réel permet aux développeurs de créer des animations fluides et engageantes. Canvas fournit les outils et les performances pour :
- Créer des effets de défilement parallaxe
- Animer des éléments d'interface utilisateur
- Construire des expériences visuelles immersives
Les développeurs peuvent utiliser JavaScript pour contrôler la chronologie de l'animation, mettre à jour les positions des objets et créer des chemins de mouvement complexes. En utilisant des bibliothèques comme GreenSock ou anime.js, les développeurs peuvent simplifier le processus d'animation et obtenir des effets visuels impressionnants facilement.
Les exemples concrets de Canvas en action sont nombreux. De nombreux jeux populaires, tels que Angry Birds et Cut the Rope, ont été construits en utilisant Canvas. Des plateformes de visualisation de données comme FusionCharts et Highcharts utilisent Canvas pour rendre des graphiques interactifs. Des applications d'édition d'images comme Pixlr et Canva utilisent Canvas pour leurs fonctionnalités d'édition basées sur le web. Les sites web et les applications web utilisent souvent Canvas pour créer des animations engageantes, des arrière-plans interactifs et des expériences utilisateur immersives.
Lors du développement d'applications Canvas pour des scénarios réels, il est important de considérer des techniques d'optimisation des performances pour s'assurer que le rendu est fluide et que les interactions sont réactives, surtout lorsqu'il s'agit de graphiques complexes ou de grands ensembles de données. Fournir des options de repli pour les navigateurs plus anciens ou les appareils avec un support Canvas limité est également important pour s'assurer que l'expérience utilisateur est cohérente sur différentes plateformes.