Рысаванне ліній праз 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();
: