Canvas
A short introduction
Canvas API
<canvas> element
<canvas>
<canvas></canvas>
width en height attribute
<canvas id="mijn-canvas" width="400" height="300"></canvas>index.html
<canvas>
Je kan er (via JavaScript) in tekenen:
<canvas> aanspreken in JS
<canvas> element op uit de DOM<canvas id="mijn-canvas" width="400" height="300"></canvas>const canvas = document.getElementById("mijn-canvas");
const ctx = canvas.getContext("2d");
// En nu kunnen we hier mee aan de slag in JS!index.html
main.js
💡 ctx is de "stift" waarmee je op je "whiteboard" tekent
Objecten tekenen
const canvas = document.getElementById("mijn-canvas");
const ctx = canvas.getContext("2d");🖊️ ctx
ctx.fillRect(x, y, w, h)
: ctx.arc(x, y, radius, startAngle, endAngle)
ctx.fillStyle = "color"
ctx.fill()
🖊️ ctx
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
ctx.fillStyle = "pink";
ctx.beginPath();
ctx.arc(50, 50, 30, 0, Math.PI * 2);
ctx.fill();
Voorbeeld
Rechthoek tekenen
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
ctx.beginPath(); // Start een nieuw pad
ctx.moveTo(50, 50); // Zet startpunt
ctx.lineTo(200, 50); // Teken lijn naar rechts
ctx.lineTo(200, 150); // Teken lijn naar beneden
ctx.lineTo(50, 150); // Teken lijn naar links
ctx.closePath(); // Sluit het pad
ctx.stroke(); // Teken de omtrek
ctx.fill(); // Vul het padVoorbeeld
Rechthoek tekenen
Uitleg
beginPath(): Start een nieuw pad. Nodig voordat je lijnen, vormen of curves gaat tekenen.moveTo(x, y): Verplaatst de "pen" naar het startpunt zonder te tekenen.lineTo(x, y): Trekt een lijn van huidige positie naar opgegeven coördinaten.closePath(): Sluit het pad door een lijn te trekken naar het beginpunt.stroke(): Tekent de omtrek van het pad.fill(): Vult het pad met de huidige vulkleur.Transformaties
Je kan tekeningen ook transformeren, zonder CSS te schrijven
translate(x, y): Verplaatst de oorsprong van het canvasrotate(angle): Roteert het canvas rond de oorsprongscale(x, y): Schaalt het canvasCanvas animaties
Canvas animaties 🤝
requestAnimationFrame(): zorgt voor de timing en vloeiende animatieCanvas reset
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Code die iets tekent
requestAnimationFrame(animate);
}
animate();💡 Maak het canvas eerst terug leeg, zodat je de vorige frame(s) niet blijft zien - tenzij je vb. een lijn wilt tekenen.
Canvas reset
Meer info
Documentatie
Meer mogelijkheden met Canvas
Canvas biedt meer dan basisvormen tekenen:
Meer mogelijkheden met Canvas
Handige libraries: