La tela (canvas) è un'area rettangolare vuota dello schermo su cui è possibile disegnare vari elementi grafici, come linee, cerchi e immagini. Un canvas è quindi un elemento HTML utile per disegnare elementi grafici su una pagina Web tramite script. Il canvas può creare animazioni, grafici interattivi e altre visualizzazioni dinamiche. È supportato dalla maggior parte dei browser Web moderni.
L’ambiente di canvas è bidimensionale, ovvero sul piano. Per lavorare in tre dimensioni esistono altre soluzioni, come WebGL o three.js.
Prendi il file index.html, localizza i tag body ed inserisci tra loro il seguente codice:
<h1>Guida AULAB su JavaScript</h1>
<canvas id="myCanvas"></canvas>
<script>
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);
La prima riga dello script recupera il nodo nel DOM che rappresenta l'elemento <canvas> e chiama il metodo document.getElementById(). A questo punto è possibile disegnare, partendo dal contesto del disegno, usando getContext() per indicare la bidimensionalità, 2d.
Eseguendolo su LiveServer, otterrai un quadrato rosso in alto a destra.
Vediamo riga per riga cosa succede.
Nell’HTML bisogna fissare un riferimento al nuovo oggetto, di nome myCanvas:
<canvas id="myCanvas"></canvas>
Poi guarda lo script.
La prima cosa da fare è dichiarare una variabile che contenga il canvas passato dal linguaggio HTML:
var canvas = document.getElementById("myCanvas");
Per disegnare si usa, normalmente, un foglio o tela a due dimensioni:
var ctx = canvas.getContext("2d");
Per la quale scegliamo come “stile di riempimento” il colore rosso:
ctx.fillStyle = "red";
Chiediamo, ora, di riempire (fill) un rettangolo sulla tela, con quattro parametri: posizione, attraverso il punto più in alto a sinistra (20, 20), la larghezza (150) e l'altezza (100).
ctx.fillRect(20, 20, 150, 100);
Proviamo a complicare l’esempio, unendo anche il controllo del mouse come hai visto nella sezione Events.
Il seguente programma legge la posizione del mouse e quando clicchi sul tasto sinistro sposta in quel posto il rettangolo rosso.
<body>
<h1>Guida AULAB su JavaScript</h1>
<canvas id="myCanvas"></canvas>
<script>
// Get the canvas element
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
// Set the canvas size
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
// Get the mouse position and draw a red box on that position
canvas.addEventListener("mousedown", function(event) {
if(event.button === 0){
let x = event.clientX;
let y = event.clientY;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "red";
ctx.fillRect(x-50, y-50, 100, 100);
}
});
</script>