Рысаванне ліній праз canvas на JavaScript
Пачнем з простага - з рысавання ліній. Каб зразумець, як гэта робіцца, уявіце сабе, што ў вас ёсць папера і алоўка. Вы можаце рысаваць на гэтым лісце, а можаце не рысуючы проста перамяшчаць алоўк у патрэбную кропку.
Гэтак жа працуе і JavaScript: у яго ёсць
алоўк (або пяро для рысавання), у патрэбнае
месца вы можаце перамяшчаць яго з дапамогай
метаду moveTo
, а рысаваць - з дапамогай
метаду lineTo
.
Абодва метады параметрамі прымаюць кропку, у
якую зрушыць кончык пяра - першым параметрам
каардынату па гарызанталі, а другім - па
вертыкалі. Пачатак каардынат - кропка 0
,
0
- гэта верхні левы кут элемента.
Калі пяро перамяшчаецца ў патрэбную кропку -
метад moveTo
проста перамяшчае, а
lineTo
у працэсе перамяшчэння рысуе
лінію ад бягучага становішча пяра да кропкі,
у якое яно перамясціцца.
Аднак, калі запусціць прыведзены вышэй код
- нічога не адбудзецца: неабходна напісаць
яшчэ дзве каманды: першая каманда beginPath
павінна быць паказана перад пачаткам рысавання
лініі, а другая каманда stroke
павінна
быць выклікана пасля ўсіх камбінацый moveTo
і lineTo
для таго, каб лінія нарысавалася.
Такім чынам, давайце напішам працуючы код для рысавання лініі:
Нарысуем лінію
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.stroke();
:
Нарысуем галубок
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(150, 50);
ctx.stroke();
:
Нарысуем трохвугольнік
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(150, 50);
ctx.lineTo(50, 50);
ctx.stroke();
:
Нарысуем квадрацік
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(150, 150);
ctx.lineTo(50, 150);
ctx.closePath();
ctx.stroke();
:
Замыканне фігур
Для рысавання замкнёнай фігуры не абавязкова
рабіць усе лініі - апошняя лінія можа
нарысавацца аўтаматычна і замкнуць фігуру.
Для гэтага перад метадам stroke
варта
выклікаць метад closePath
.
Гэты метад спрабуе зачыніць фігуру, рысуючы прамую лінію з канчатковай кропкі ў пачатковую. Калі фігура была ўжо закрыта ці з'яўляецца проста кропкай, то метад нічога не робіць.
Давайце нарысуем трохвугольнік, выкарыстоўваючы closePath
:
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(150, 50);
//ctx.lineTo(50, 50); - гэты крок апускаем
ctx.closePath();
ctx.stroke();
:
Закрашванне фігур
Замест метаду stroke
можна выкарыстоўваць
метад fill
- пры гэтым фігура не абавязкова
павінна быць цалкам закрытай - яна зафарбуецца
і так:
<canvas width="200" height="200" style="background: #f4f4f4;"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(150, 50);
//ctx.lineTo(50, 50); - гэты крок апускаем
//ctx.closePath(); - і гэты таксама
ctx.fill();
: