Dans ce tutoriel, nous allons découvrir ensemble comment créer une application de dessin en ligne simple mais complète. Cette application de dessin en HTML et Javascript vous permettra de dessiner avec votre souris ou votre écran tactile, de choisir la couleur et la taille du pinceau, d’effacer le dessin, et même de sauvegarder votre création au format image.
Application de Dessin
Que vous soyez débutant ou que vous ayez déjà quelques notions en HTML, CSS et JavaScript, ce guide est fait pour vous.
Nous allons détailler chaque partie du code étape par étape, afin que vous compreniez non seulement comment fonctionne l’application, mais aussi pourquoi chaque ligne de code est utilisée. Vous pourrez ainsi personnaliser votre application à votre guise, ajouter de nouvelles fonctionnalités, et surtout apprendre en pratiquant.
Qu’est-ce qu’une application de dessin en ligne ?
Une application de dessin en ligne est un programme que vous pouvez utiliser directement dans votre navigateur pour créer des dessins numériques. Contrairement à un logiciel installé sur un ordinateur, elle ne nécessite aucune installation et fonctionne sur n’importe quel appareil doté d’un navigateur moderne, que ce soit un ordinateur, une tablette ou un smartphone.
Le principe est simple : vous utilisez votre souris ou votre doigt pour tracer sur une zone appelée canvas. Le canvas est une surface rectangulaire où tous les dessins apparaissent en temps réel. Grâce à JavaScript, vous pouvez interagir avec cette surface pour détecter le mouvement de la souris ou du doigt, puis dessiner des lignes en fonction de ces mouvements.
Dans notre application, nous avons également ajouté des contrôles pour choisir la couleur du pinceau, ajuster sa taille, effacer le dessin ou le sauvegarder. Ces fonctionnalités sont très utiles pour transformer une simple zone de dessin en véritable outil créatif.
Structure générale du projet
Avant de plonger dans le code, regardons la structure générale de notre projet. L’application est contenue dans un seul fichier HTML, qui inclut :
- Le head, où nous définissons les informations de base du document, comme le titre, le jeu de caractères, le viewport et le style.
- Le body, qui contient la structure visible de l’application : le titre, la zone de dessin et les contrôles.
- Le script JavaScript, qui gère le comportement de l’application : dessiner, effacer et sauvegarder.
Nous avons utilisé TailwindCSS pour faciliter la mise en forme et rendre l’interface agréable et responsive, ce qui signifie qu’elle s’adapte à toutes les tailles d’écran.
Tailwind CSS est un framework CSS (une sorte de trousse à outils) qui facilite la création rapide d’interfaces web.
Au lieu d’écrire du code CSS complexe à partir de zéro, il propose un ensemble de classes utilitaires prédéfinies. Par exemple, pour centrer un élément, au lieu d’écrire display: flex; justify-content: center; align-items: center;
, on peut simplement utiliser les classes flex
, justify-center
, et items-center
directement dans le HTML. Cela rend le développement plus rapide et permet de créer des designs sur mesure sans quitter le code HTML.
Conception du head et des styles
Définir le document HTML
La première ligne de notre fichier est :
<!DOCTYPE html>
<html lang="fr">
Elle indique au navigateur que notre document est en HTML5 et que la langue principale est le français. Cela permet de s’assurer que le contenu sera affiché correctement et que les lecteurs d’écran ou moteurs de recherche pourront interpréter la page correctement.
Les métadonnées
Ensuite, nous avons :
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Application de Dessin</title>
La première ligne définit le jeu de caractères en UTF-8, ce qui garantit que tous les caractères spéciaux, accents ou symboles s’affichent correctement.
La deuxième ligne permet à notre site d’être responsive, c’est-à-dire qu’il s’adapte automatiquement à la largeur de l’écran de l’utilisateur.
Enfin, le titre s’affiche dans l’onglet du navigateur et est important pour le SEO, car les moteurs de recherche l’utilisent pour référencer la page.
Inclusion de TailwindCSS
<script src="https://cdn.tailwindcss.com"></script>
Cette ligne importe TailwindCSS directement depuis un CDN. Tailwind est un framework CSS qui facilite la mise en forme rapide et moderne des éléments HTML, sans avoir besoin d’écrire beaucoup de CSS classique. Grâce à lui, notre application aura un style moderne et épuré.
Un CDN (Content Delivery Network), ou en français « réseau de diffusion de contenu », est un réseau de serveurs répartis géographiquement à travers le monde. Son rôle principal est de stocker des copies de contenu web (comme des images, des vidéos ou des fichiers CSS) sur ces différents serveurs. Lorsqu’un utilisateur essaie d’accéder à un site web, le CDN s’assure que le contenu est livré par le serveur le plus proche de lui. Cela réduit la distance que les données doivent parcourir, ce qui rend le site beaucoup plus rapide et plus fiable pour l’utilisateur, où qu’il se trouve.
Styles personnalisés
Nous avons ajouté une section <style>
pour définir des styles spécifiques :
body {
font-family: 'Inter', sans-serif;
background-color: #f0f4f8;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
Cette partie définit la police de caractères, la couleur de fond et la disposition générale de la page. Nous utilisons flexbox pour centrer notre application au milieu de l’écran, à la fois horizontalement et verticalement.
Ensuite, nous stylisons notre container principal, qui contient tout le contenu visible de l’application. Il est important de comprendre que ce container sert à créer un cadre visuel agréable et à séparer l’interface du reste de la page :
.container {
background-color: #ffffff;
border-radius: 12px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
padding: 20px;
width: 90%;
max-width: 800px;
display: flex;
flex-direction: column;
gap: 20px;
box-sizing: border-box;
}
Chaque propriété ici a un rôle précis :
background-color
définit la couleur blanche du fond du container.border-radius
arrondit les coins pour un effet esthétique.box-shadow
ajoute une ombre légère pour donner un effet de profondeur.padding
ajoute de l’espace à l’intérieur du container.width
etmax-width
limitent la taille pour qu’elle soit agréable sur tous les écrans.display: flex
etflex-direction: column
organisent le contenu verticalement.gap
crée de l’espace entre les éléments à l’intérieur du container.
Structure HTML du corps de l’application
Le corps du fichier HTML se trouve entre les balises <body>
et </body>
. C’est ici que nous définissons ce que l’utilisateur voit et avec quoi il interagit. Dans notre application, nous avons organisé le contenu en trois parties principales : le titre, la zone de dessin et les contrôles.
Le container principal
<div class="container">
Cette balise <div>
correspond au container principal dont nous avons parlé précédemment dans le CSS. Tous les éléments visibles de l’application sont placés à l’intérieur de ce container, ce qui nous permet de les centrer et de leur donner un style uniforme.
Le titre de l’application
<h1 class="text-3xl font-bold text-center text-gray-800">Application de Dessin</h1>
Cette ligne crée le titre visible en haut de l’application. Les classes TailwindCSS utilisées ici signifient :
text-3xl
: taille du texte très grande.font-bold
: texte en gras.text-center
: texte centré horizontalement.text-gray-800
: couleur du texte gris foncé pour une bonne lisibilité.
Le titre permet à l’utilisateur de savoir immédiatement de quoi il s’agit et sert aussi au SEO en contenant des mots-clés comme « Application de Dessin ».
La zone de dessin (canvas)
<div class="canvas-container">
<canvas id="canvas"></canvas>
</div>
Le canvas est l’élément le plus important. C’est la surface sur laquelle l’utilisateur pourra dessiner.

Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?- La balise
<div class="canvas-container">
sert à encadrer le canvas et lui donner un style, comme une bordure, un fond blanc et des coins arrondis. - La balise
<canvas id="canvas">
est la surface réelle de dessin. Leid="canvas"
permet au JavaScript de la retrouver et d’y dessiner.
Le canvas n’a pas de contenu par défaut. Tout ce que vous verrez sera créé en temps réel grâce aux scripts JavaScript que nous avons inclus plus bas dans le fichier.
Les contrôles de l’application
Sous la zone de dessin, nous avons placé les contrôles qui permettent à l’utilisateur de personnaliser son dessin :
<div class="controls">
<div class="control-group">
<label for="colorPicker">Couleur :</label>
<input type="color" id="colorPicker" value="#000000">
</div>
<div class="control-group">
<label for="sizeSlider">Taille :</label>
<input type="range" id="sizeSlider" min="1" max="50" value="5">
</div>
<button id="clearButton" class="button">Effacer</button>
<button id="saveButton" class="button">Sauvegarder</button>
</div>
Expliquons chaque élément :
- Groupe de couleur
- Le
<label>
indique à l’utilisateur à quoi sert l’élément. - L’
<input type="color">
permet de choisir la couleur du pinceau. La valeur initiale#000000
correspond au noir.
- Le
- Groupe de taille
- L’
<input type="range">
est un curseur qui va de 1 à 50 et contrôle la taille du pinceau. La valeur initiale est 5. - Ce type de contrôle est très pratique car il permet un réglage précis et visuel.
- L’
- Bouton Effacer
- Ce bouton permet de supprimer tout le contenu du canvas pour repartir à zéro.
- Bouton Sauvegarder
- Ce bouton transforme le dessin en image PNG et le télécharge automatiquement sur l’ordinateur ou l’appareil de l’utilisateur.
Toutes ces fonctionnalités rendent l’application interactive et intuitive. Les contrôles sont regroupés dans des control-group
pour faciliter le style et l’organisation.
Pourquoi cette structure est importante
L’organisation du HTML est cruciale pour deux raisons principales :
Lisibilité et maintenance
Chaque section est clairement délimitée, ce qui rend le code facile à comprendre et à modifier.
Interaction avec JavaScript
Chaque élément possède un id
unique (canvas
, colorPicker
, sizeSlider
, clearButton
, saveButton
). Cela permet à JavaScript de les retrouver facilement pour y ajouter des fonctionnalités.
JavaScript : le cœur de l’application de dessin
Le JavaScript est la partie qui rend votre application interactive. Sans lui, vous auriez uniquement une interface statique, incapable de répondre aux mouvements de la souris ou aux actions de l’utilisateur. Nous allons analyser le script ligne par ligne pour que vous compreniez comment il fonctionne et comment chaque action est réalisée.
Récupérer les éléments HTML
Au début du script, nous récupérons tous les éléments que nous avons créés dans le HTML pour pouvoir les manipuler en JavaScript :
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const colorPicker = document.getElementById('colorPicker');
const sizeSlider = document.getElementById('sizeSlider');
const clearButton = document.getElementById('clearButton');
const saveButton = document.getElementById('saveButton');
canvas
correspond à la zone de dessin.ctx
est le contexte du canvas, c’est ce qui permet de dessiner réellement à l’intérieur du canvas.colorPicker
,sizeSlider
,clearButton
etsaveButton
sont les contrôles que nous avons créés pour l’utilisateur.
Sans cette étape, JavaScript ne saurait pas sur quels éléments agir.
Variables de dessin
let isDrawing = false;
let lastX = 0;
let lastY = 0;
Ces variables sont essentielles pour suivre l’état du dessin :
isDrawing
indique si l’utilisateur est en train de dessiner.lastX
etlastY
stockent les coordonnées du dernier point où la souris ou le doigt a été détecté. Cela permet de tracer des lignes continues plutôt que des points isolés.
Ajuster la taille du canvas
Pour que le canvas occupe correctement toute la zone disponible, nous avons la fonction suivante :
function resizeCanvas() {
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
}
window.addEventListener('resize', resizeCanvas);
window.onload = resizeCanvas;
resizeCanvas()
définit la largeur et la hauteur du canvas pour qu’elles correspondent à celles de son container.window.addEventListener('resize', resizeCanvas)
permet de réajuster le canvas automatiquement si l’utilisateur change la taille de la fenêtre.window.onload = resizeCanvas
initialise la taille du canvas lorsque la page se charge.
Cette étape est cruciale pour que le dessin ne soit pas déformé ou tronqué.
Dessiner avec la souris
Pour permettre le dessin à la souris, nous utilisons plusieurs événements :
canvas.addEventListener('mousedown', (e) => {
isDrawing = true;
[lastX, lastY] = [e.offsetX, e.offsetY];
});
canvas.addEventListener('mousemove', (e) => {
if (isDrawing) {
draw(e);
}
});
canvas.addEventListener('mouseup', () => isDrawing = false);
canvas.addEventListener('mouseout', () => isDrawing = false);
- mousedown : déclenché lorsque l’utilisateur clique sur le canvas.
- Nous activons
isDrawing = true
. - Nous stockons les coordonnées initiales pour commencer la ligne.
- Nous activons
- mousemove : déclenché lorsque la souris bouge.
- Si
isDrawing
est vrai, nous appelons la fonctiondraw()
pour tracer la ligne.
- Si
- mouseup et mouseout : déclenchés lorsque l’utilisateur relâche le clic ou sort du canvas.
- Nous désactivons le dessin en mettant
isDrawing = false
.
- Nous désactivons le dessin en mettant
Fonction de dessin pour la souris
function draw(e) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(e.offsetX, e.offsetY);
ctx.strokeStyle = colorPicker.value;
ctx.lineWidth = sizeSlider.value;
ctx.lineCap = 'round';
ctx.stroke();
[lastX, lastY] = [e.offsetX, e.offsetY];
}
Explication pas à pas :
ctx.beginPath()
: commence un nouveau tracé.ctx.moveTo(lastX, lastY)
: place le point de départ de la ligne au dernier point enregistré.ctx.lineTo(e.offsetX, e.offsetY)
: trace une ligne jusqu’au point actuel de la souris.ctx.strokeStyle = colorPicker.value
: définit la couleur de la ligne selon le choix de l’utilisateur.ctx.lineWidth = sizeSlider.value
: définit l’épaisseur de la ligne selon le curseur.ctx.lineCap = 'round'
: rend les extrémités de la ligne arrondies pour un rendu plus naturel.ctx.stroke()
: dessine la ligne sur le canvas.- Enfin, nous mettons à jour
lastX
etlastY
pour continuer la ligne au prochain mouvement.
Dessiner sur mobile : les événements tactiles
Les smartphones et tablettes n’utilisent pas de souris, mais des touches tactiles. Pour que votre application fonctionne également sur ces appareils, nous devons gérer les événements tactiles avec JavaScript :
canvas.addEventListener('touchstart', (e) => {
e.preventDefault();
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
isDrawing = true;
[lastX, lastY] = [touch.clientX - rect.left, touch.clientY - rect.top];
}, { passive: false });
canvas.addEventListener('touchmove', (e) => {
e.preventDefault();
if (isDrawing) {
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
const newX = touch.clientX - rect.left;
const newY = touch.clientY - rect.top;
drawTouch(newX, newY);
}
}, { passive: false });
canvas.addEventListener('touchend', () => isDrawing = false);
- touchstart : déclenché lorsque l’utilisateur touche l’écran.
e.preventDefault()
empêche le navigateur de faire défiler la page ou d’effectuer d’autres actions par défaut.- Nous calculons les coordonnées du point touché et commençons le dessin.
- touchmove : déclenché lorsque le doigt se déplace sur l’écran.
- Si
isDrawing
est vrai, nous appelons la fonctiondrawTouch()
pour tracer la ligne jusqu’au nouveau point.
- Si
- touchend : déclenché lorsque le doigt quitte l’écran.
- Le dessin s’arrête.
Fonction de dessin tactile
function drawTouch(newX, newY) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(newX, newY);
ctx.strokeStyle = colorPicker.value;
ctx.lineWidth = sizeSlider.value;
ctx.lineCap = 'round';
ctx.stroke();
[lastX, lastY] = [newX, newY];
}
Cette fonction fonctionne exactement comme draw()
pour la souris. La seule différence est que nous utilisons des coordonnées issues de l’écran tactile. Ainsi, votre application devient complètement mobile-friendly.
Effacer le canvas
Pour que l’utilisateur puisse repartir à zéro, nous avons ajouté un bouton Effacer :
clearButton.addEventListener('click', () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
});
ctx.clearRect()
supprime tout ce qui se trouve sur le canvas dans la zone spécifiée.- Ici, nous utilisons toute la largeur et la hauteur du canvas pour tout effacer.
C’est une fonctionnalité très simple mais essentielle pour une application de dessin.
Sauvegarder le dessin
Le bouton Sauvegarder permet à l’utilisateur de télécharger son dessin au format PNG :
saveButton.addEventListener('click', () => {
const dataURL = canvas.toDataURL('image/png');
const link = document.createElement('a');
link.href = dataURL;
link.download = 'mon-dessin.png';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
Explications :
canvas.toDataURL('image/png')
transforme le dessin en image PNG encodée en base64.- Nous créons un lien
<a>
temporaire pour déclencher le téléchargement. link.download = 'mon-dessin.png'
définit le nom du fichier.link.click()
simule un clic pour démarrer le téléchargement.- Enfin, nous supprimons le lien du DOM pour ne pas laisser d’élément inutile.
Cette méthode est pratique, car elle fonctionne directement dans le navigateur sans serveur.
Le code en entier
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Application de Dessin</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
body {
font-family: 'Inter', sans-serif;
background-color: #f0f4f8;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
background-color: #ffffff;
border-radius: 12px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
padding: 20px;
width: 90%;
max-width: 800px;
display: flex;
flex-direction: column;
gap: 20px;
box-sizing: border-box;
}
.canvas-container {
border: 2px solid #e2e8f0;
border-radius: 8px;
background-color: #fff;
overflow: hidden;
flex-grow: 1;
}
#canvas {
display: block;
width: 100%;
height: 100%;
cursor: crosshair;
}
.controls {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
align-items: center;
}
.control-group {
display: flex;
align-items: center;
gap: 5px;
}
.control-group label {
font-size: 14px;
color: #4a5568;
}
.control-group input[type="color"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
cursor: pointer;
padding: 0;
overflow: hidden;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.control-group input[type="color"]::-webkit-color-swatch-wrapper {
padding: 0;
}
.control-group input[type="color"]::-webkit-color-swatch {
border: none;
}
.control-group input[type="range"] {
width: 80px;
cursor: pointer;
}
.button {
padding: 8px 16px;
border-radius: 8px;
font-weight: 500;
transition: background-color 0.2s, box-shadow 0.2s;
cursor: pointer;
}
#clearButton {
background-color: #e53e3e;
color: #fff;
}
#clearButton:hover {
background-color: #c53030;
}
#saveButton {
background-color: #38a169;
color: #fff;
}
#saveButton:hover {
background-color: #2f855a;
}
</style>
</head>
<body>
<div class="container">
<h1 class="text-3xl font-bold text-center text-gray-800">Application de Dessin</h1>
<div class="canvas-container">
<canvas id="canvas"></canvas>
</div>
<div class="controls">
<div class="control-group">
<label for="colorPicker">Couleur :</label>
<input type="color" id="colorPicker" value="#000000">
</div>
<div class="control-group">
<label for="sizeSlider">Taille :</label>
<input type="range" id="sizeSlider" min="1" max="50" value="5">
</div>
<button id="clearButton" class="button">Effacer</button>
<button id="saveButton" class="button">Sauvegarder</button>
</div>
</div>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const colorPicker = document.getElementById('colorPicker');
const sizeSlider = document.getElementById('sizeSlider');
const clearButton = document.getElementById('clearButton');
const saveButton = document.getElementById('saveButton');
let isDrawing = false;
let lastX = 0;
let lastY = 0;
// Fonction pour ajuster la taille du canvas
function resizeCanvas() {
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
}
window.addEventListener('resize', resizeCanvas);
window.onload = resizeCanvas;
// Événements de souris pour le dessin
canvas.addEventListener('mousedown', (e) => {
isDrawing = true;
[lastX, lastY] = [e.offsetX, e.offsetY];
});
canvas.addEventListener('mousemove', (e) => {
if (isDrawing) {
draw(e);
}
});
canvas.addEventListener('mouseup', () => isDrawing = false);
canvas.addEventListener('mouseout', () => isDrawing = false);
// Événements tactiles pour le dessin sur mobile
canvas.addEventListener('touchstart', (e) => {
e.preventDefault();
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
isDrawing = true;
[lastX, lastY] = [touch.clientX - rect.left, touch.clientY - rect.top];
}, { passive: false });
canvas.addEventListener('touchmove', (e) => {
e.preventDefault();
if (isDrawing) {
const touch = e.touches[0];
const rect = canvas.getBoundingClientRect();
const newX = touch.clientX - rect.left;
const newY = touch.clientY - rect.top;
drawTouch(newX, newY);
}
}, { passive: false });
canvas.addEventListener('touchend', () => isDrawing = false);
// Fonction de dessin pour la souris
function draw(e) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(e.offsetX, e.offsetY);
ctx.strokeStyle = colorPicker.value;
ctx.lineWidth = sizeSlider.value;
ctx.lineCap = 'round';
ctx.stroke();
[lastX, lastY] = [e.offsetX, e.offsetY];
}
// Fonction de dessin pour le toucher
function drawTouch(newX, newY) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(newX, newY);
ctx.strokeStyle = colorPicker.value;
ctx.lineWidth = sizeSlider.value;
ctx.lineCap = 'round';
ctx.stroke();
[lastX, lastY] = [newX, newY];
}
// Bouton pour effacer le canvas
clearButton.addEventListener('click', () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
});
// Bouton pour sauvegarder l'image
saveButton.addEventListener('click', () => {
const dataURL = canvas.toDataURL('image/png');
const link = document.createElement('a');
link.href = dataURL;
link.download = 'mon-dessin.png';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
</script>
</body>
</html>
Améliorer votre application
Maintenant que vous avez compris toutes les parties du code, voici quelques conseils pour aller plus loin :
- Vous pouvez ajouter un choix de fond pour dessiner sur différentes couleurs ou images.
- Il est possible de créer des formes prédéfinies, comme des cercles ou rectangles, pour enrichir les possibilités de dessin.
- Vous pouvez sauvegarder plusieurs dessins et créer un album dans l’application.
- L’ajout de raccourcis clavier peut rendre l’application plus rapide à utiliser pour les utilisateurs avancés.
- Enfin, pensez à optimiser la performance pour éviter les ralentissements sur les appareils mobiles en limitant le nombre de lignes tracées par seconde si nécessaire.
Vous avez maintenant toutes les clés pour comprendre et créer une application de dessin interactive et responsive. Nous avons vu ensemble :
- La structure HTML et les éléments essentiels : canvas, contrôles et titre.
- Le CSS pour styliser l’application et la rendre agréable et moderne.
- Le JavaScript pour gérer le dessin avec la souris et le toucher, les boutons Effacer et Sauvegarder, et la réactivité du canvas.
- Des conseils pour personnaliser et améliorer votre application.
Cette application peut être enrichie et adaptée selon vos besoins. Vous pouvez ajouter des fonctionnalités comme des gommeurs, plusieurs pinceaux, dégradés de couleurs, ou même des animations pour transformer votre simple outil de dessin en un véritable logiciel créatif.
En pratiquant et en expérimentant avec ce code, vous apprendrez non seulement à coder des applications interactives mais aussi à maîtriser l’interaction entre HTML, CSS et JavaScript, une compétence essentielle pour tout développeur web.