API client web - Canvas
Le <canvas>
HTML5 est une zone de dessin qui permet de dessiner des graphiques, des animations et des jeux en utilisant Javascript.
L’API Canvas fournit l’interface de programmation pour dessiner des graphiques en 2D et en 3D sur une page web.
Dans ce premier exemple amusant, nous allons utiliser l’API Canvas pour créer une animation de balles rebondissantes dans un context en 2 dimensions.
Spécifications souhaitées
Dans un premier temps, voici les spécifications fonctionnelles que nous allons implémenter :
- On veut afficher un canvas de la taille de la fenêtre du navigateur, contenant des balles qui rebondissent
- La taille, vitesse, couleur et direction des balles doivent pouvoir être aléatoires
- Les balles rebondiront sur les bords du canvas
- Cliquer sur le canvas ajoutera une nouvelle balle à la position du clic
- Les balles changeront de couleur lorsqu’elles se toucheront
- De plus, on souhaite :
- Utiliser de la programmation orientée objet
- Utilser du Javascript “Vanilla” (c.à.d sans bibliothèque ou API externes que celles fournies par le navigateur)
- Afficher le nombre de balles actives
- Ajouter des boutons pour mettre en pause et reprendre l’animation, ainsi que pour effacer toutes les balles
Voici un aperçu du résultat final
Préparation du projet
- Créez un dossier global pour stocker le projet développé pendant ce cours :
mkdir tutoriel-api cd tutoriel-api
- Créez un dossier
client
pour stocker les fichiers de la partie client de l’application
mkdir client cd client
-
Ouvrez le dossier
client
dans votre éditeur de code -
Le projet sera composée de 3 fichiers déstinés au navigateur et 2 classes d’objets pour gérer les balles :
index.html styles.css main.mjs classes/Balle.mjs classes/Balles.mjs
Créez ces fichiers manuellement ou bien exécutez la commande suivante dans un terminal :
1 New-Item index.html, main.mjs, styles.css
1 New-Item classes -ItemType Directory
1 New-Item classes/Balle.mjs, classes/Balles.mjs
1mkdir classes; touch index.html main.mjs styles.css classes/Balle.mjs classes/Balles.mjs
Le HTML
Le fichier index.html
sera notre page principale et va contenir :
- Un lien vers le fichier
styles.css
pour ajouter du style à la page. - Un élément
<canvas>
qui servira de zone de dessin. - Une div contenant des boutons de contrôle.
- Un lien vers le fichier
main.mjs
pour ajouter le code Javascript.
1<!DOCTYPE html>2<html lang="fr-FR">3
4<head>5 <meta charset="utf-8">6 <meta name="viewport" content="width=device-width, initial-scale=1.0">7
8 <title>API Canvas</title>9
10 <link rel="stylesheet" href="styles.css">11
12</head>13
14<body>15
16 <canvas></canvas>17
18 <div class="controls">19 <button id="start">Start</button>20 <button id="stop">Stop</button>21 <button id="clear">Clear</button>22 <p><span id="balls-count">0</span></p>23 </div>24
25 <script src="main.mjs" type="module"></script>26
27</body>28
29</html>
Le CSS
Le fichier styles.css
contiendra le style de la page, qui sera assez simple pour ce tutoriel.
1html,2body {3 margin: 0;4 min-height: 500px;5}6
7html {8 height: 100%;9}10
11body {12 overflow: hidden;13 height: inherit;14}15
16canvas {17 cursor: pointer;18}19
20.controls {21 position: absolute;22 bottom: 0;23 left: 0;24 right: 0;25 padding: 10px;26 color: white;27 font-family: sans-serif;28 font-size: 12px;29 cursor: pointer;30 display: flex;31 justify-content: center;32 gap: 10px;33}34
35.controls button {36 background: #007bff;37 border: none;38 color: white;39 padding: 10px 20px;40 border-radius: 5px;41 cursor: pointer;42}
Le Javascript et l’API Canvas
Commencer à utiliser une API, qu’elle soit client ou serveur, impliquera toujours une phase de recherche et d’apprentissage.
La documentation Mozilla est la ressource la plus complète et la plus fiable pour apprendre à utiliser les API Web.
L’API Canvas a bien sûr sa propre section sur le site de Mozilla.
Dans les grandes lignes, le Canvas
est :
- un élément HTML
<canvas>
qui permet de dessiner des graphiques - en 2D et en 3D selon le
contexte
- un contexte est un objet qui expose
- des méthodes pour dessiner des formes
- des propriétés pour définir des styles
Dessiner dans le canvas
Dessiner dans le canvas
Dessiner un cercle
Commençons par initialiser le canvas et dessiner un cercle pour tester que tout fonctionne correctement et découvrir la syntaxe de base de l’API Canvas.
Dans le fichier main.mjs
, ajoutez le code suivant :
1const canvas = document.querySelector("canvas"); // Récupère l'élément canvas du DOM2const ctx = canvas.getContext("2d"); // Définit et récupère le contexte du canvas, ici un contexte en 2 dimensions3
4canvas.width = window.innerWidth; // Définit la largeur du canvas aux dimensions de la fenêtre5canvas.height = window.innerHeight; // Définit la hauteur du canvas aux dimensions de la fenêtre6
7ctx.fillStyle = "black"; // Définit la couleur de fond du contexte8ctx.fillRect(0, 0, canvas.width, canvas.height); // Dessine un rectangle, du point (0, 0) à la taille du canvas, en utilisant la couleur de fond définie précédemment9
10ctx.beginPath(); // Démarre un nouveau chemin11ctx.arc(100, 100, 30, 0, Math.PI * 2); // Dessine un cercle de rayon 30px à la position (100px, 100px)12ctx.fillStyle = "red"; // Définit la couleur de remplissage13ctx.fill();
À ce stade, vous devriez voir un cercle rouge apparâitre sur le canvas :
Première conclusion
- Nous avons vu comment initialiser un canvas, définir un contexte en 2D et dessiner un cercle.
- Nous avons découvert la syntaxe de base de l’API Canvas.
- Nous avons donc déjà commencé à utiliser une API client !
Dans la prochaine partie, nous allons continuer à explorer l’API Canvas pour créer une animation de balles rebondissantes.