<canvas>
Slouží pro vytvoření grafického plátna
Na toto plátno se maluje pomocí různých scriptů
Editor
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
/**
* Bezny postup pro praci s canvas elementem
* 1. Propojime si HTML element s JavaScriptem
* 2. Ziskame si pro canvas graficky kontext
* 3. Nastavime sirku a vysku canvasu / vytvorime funkci, ktera se nam o to bude starat
* 4. Pres graficky kontext zacneme vykreslovani
* 5. Kresleni zacina naplnenim barvou. Styl naplneni se deli na fill (barva obsahu tvaru) a stroke (barva obvodu tvaru)
* 6. Nasleduje funkce pro vykresleni
*/
// odkazujeme na canvas v HTML
const canvas = document.getElementById('canvas');
// ziskavame graficky kontext z naseho platna (interface, ktery poskytuje 2d renderovani v canvas elementu - soucasti Canvas API)
const ctx = canvas.getContext('2d');
// vlastnosti width - sirka, height - vyska | vraceji sirku a vysku naseho canvasu | v nasem pripade prenastavujeme sirku a vysku canvasu na sirku a vysku okna
canvas.width = window.innerWidth;
canvas.height = 1080;
//canvas.height = window.innerHeight;
// vlastnost fillStyle - barva obsahu | nekolik zpusobu zapisu - slovne, hex, rgb...
ctx.fillStyle = 'green';
ctx.fillStyle = '#FFAA00';
ctx.fillStyle = "rgb(252, 45, 36)";
ctx.fillStyle = 'rgba(255, 165, 0, 1)';
// funkce fillRect() vykresli obsah obdelniku (souradniceX v px, souradniceY v px, sirka v px, vyska v px)
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "rgb(52, 245, 36)";
ctx.fillRect(50, 50, 100, 100);
// vlastnost strokeStyle - nastavi barvu okraje | zase stejne zpusoby zapisu barvy jako u fillStyle
ctx.strokeStyle = "black";
// funkce strokeRect() vykresli okraj obdelniku (souradniceX v px, souradniceY v px, sirka v px, vyska v px)
ctx.strokeRect(200, 200, 100, 100);
// funkce clearRect() vygumuje z platna danou oblast (souradniceX v px, souradniceY v px, sirka v px, vyska v px)
ctx.clearRect(75, 75, 100, 100);
ctx.fillStyle = "black";
/**
* Dalsi dulezitou soucasti jsou cesty - cesta je skupina bodu propojena nekolika carami.
* Tyto cary mohou nabyvat ruznych tvaru ci krivek s ruznymi rozmery
* Tyto cestou mohou byt uzavrene, ale i nemusi
*
* Postup pro vytvoreni cesty:
* 1. Zavolame funkci beginPath() - otevreme nasi cestu
* 2. Provedeme vykreslovaci operace
*/
/**
* Pohyb stetcem
*/
// otevre cestu
ctx.beginPath();
// posune stetec na souradnice x, y
ctx.moveTo(200, 100);
// ze souradnic 200, 100 se udela cara stetcem az do souradnic 300, 175
ctx.lineTo(300, 175);
// z 300, 175 se udela cara stetcem az do 300, 25
ctx.lineTo(300, 25);
// z 200, 100 se udela cara az do 200, 100
ctx.lineTo(200, 100);
// vymaluji se nase pohyby
ctx.stroke();
/**
* vykresleni kruhu
*/
ctx.beginPath();
ctx.arc(500, 100, 40, 0, Math.PI * 2, 0);
ctx.stroke();
/**
* vykresleni kvadraticke krivky
*/
ctx.beginPath();
ctx.moveTo(600, 600);
ctx.quadraticCurveTo(600, 800, 800, 600);
ctx.stroke();
ctx.fillStyle = "rgba(0, 255, 0, 0.4)";
ctx.fillRect(200, 600, 100, 100);
ctx.fillStyle = "rgba(0, 0, 255, 0.6)";
ctx.fillRect(250, 650, 100, 100);
ctx.strokeStyle = "black";
// zmena tloustky cary
ctx.lineWidth = 5;
ctx.beginPath();
ctx.moveTo(100, 400);
ctx.lineTo(300, 400);
ctx.stroke();
ctx.strokeStyle = "black";
ctx.lineWidth = 50;
// koncova cepicka vykreslenych car
ctx.lineCap = "round"; // butt, round, square
ctx.beginPath();
ctx.moveTo(100, 500);
ctx.lineTo(300, 500);
ctx.stroke();
/**
* vytvoreni linearniho gradientu
*/
let linGra = ctx.createLinearGradient(600, 400, 800, 400);
linGra.addColorStop(0, 'red');
linGra.addColorStop(1, 'green');
ctx.fillStyle = linGra;
ctx.fillRect(600, 400, 200, 200);
/**
* vypsani textu
*/
ctx.font = "92px serif";
ctx.fillText('http://tillix.eu', 900, 900);
</script>
</body>
</html>
Page
Canvas
Arc
ctx.arc(500, 100, 40, 0, Math.PI * 2, 0);
ctx.arc(souradniceX, souradniceY, radius, pocateni uhel v radianech - casto se pracuje s Math.PI, koncovy uhel v radianech, podminka jestli pujde arc proti smeru hodinovych rucicek - bud true nebo se nemusi vyplnovat);
QC
ctx.moveTo(20, 20); - (Bod A[0], Bod A[1])
ctx.quadraticCurveTo(20, 100, 200, 20); (Bod B[0], Bod B[1], Bod C[0], Bod C[1])