[์ถ์ฒ-์ ํ๋ธ ๋ ธ๋ง๋ ์ฝ๋ Nomad Coders]
MDN์ ํตํด์ canvas์ ๋ํด ๋ฐฐ์๋ณด์!
ํ์ํ๊ฑด ์ด ์ฌ์ดํธ์ ๋ค ์๋ค.
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D
canvas๋ context๋ฅผ ๊ฐ๊ณ ์๋ HTML์ ํ ์์์ด๋ค.
์ฐ๋ฆฌ๋ ๊ทธ ์์ ์์์ pixel๋ค์ ๋ค๋ฃฐ ์ ์๋ค.๊ทธ๋์ canvas๋ฅผ ํฌ๊ฒ ๋ง๋ค์ด์ผ ํจ
์ฐ๋ฆฌ๊ฐ ํด์ผํ ๊ฑด context variable์ ๋ง๋๋ ๊ฒ์ด๋ค.
const ctx = canvas.getContext('2d');
๊ทธ ๋ค์์ context์ default๋ฅผ ์ค์ ํ๋ค.
context๋ lineWidth๋ ์๊ณ fill๋ ์๊ณ strokeStyle๋ ์๋ค.
๋จผ์ strokeStyle์ ์ถ๊ฐํ์.
์ด๊ฑธ ์ฌ์ฉํ๋ ค๋ ์ฌ๋์ด ์ฒซ ๋ฒ์งธ ์(๊ฒ์ ์)์ผ๋ก ์์ํ๋๋ก ์ค์ ํ๋ค.
ctx.strokeStyle = "##2c2c2c";
lineWidth(๊ตต๊ธฐ ์กฐ์ )์ ์ค์ ํด์ค๋ค.
ctx.lineWidth = 2.5;
startPainting์ด๋ผ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.
function startPainting() {
painting = true;
}
์ฝ๋ฉ์ค..
if(canvas) {
canvas.addEventListener("mousemove", onMouseMove);
canvas.addEventListener("mousedown", startPainting);
canvas.addEventListener("mouseup", stopPainting);
canvas.addEventListener("mouseleave", stopPainting);
}
onMouseMove๋ฅผ ์ ๊ฒฝ์จ์ ์ ์ฒ๋ฆฌํด์ผํ๋ค.
์๋ํ๋ฉด ์ฌ๊ธฐ์์ ๋ชจ๋ ์์ง์์ ๊ฐ์งํ๊ณ ๋ผ์ธ์ ๋ง๋ค์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
context๋ ๋ง์ ๊ฒ์ ๊ฐ๊ณ ์๋๋ฐ path๋ ๊ฐ๊ณ ์๋ค.
path๋ ๊ธฐ๋ณธ์ ์ธ ์ (line)์ด๋ค.
path๋ฅผ ์์ง์ผ ์๋ ์๊ณ path๋ฅผ ์์ผ๋ก ์ฑ์ธ ์๋ ์๊ณ path๋ฅผ ๋ซ์ ์๋ ์๋ค.
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก ์ (line)์ ์์ํ ๊ฒ์ด๋ค.
ํ์ง๋ง painting์ ํ ๋ path๋ ํ์ํ์ง ์๋ค. painting์ ํ์ง ์์ ๋๋ง ํ์ํจ!
path๋ฅผ ๋ง๋๋ ๊ฑด ๊ธฐ๋ณธ์ ์ผ๋ก ์ (line), ์ ์ ์์์ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
์์์ ์ ๋ง์ฐ์ค๊ฐ ์์ง์ด๋ ๊ณณ์ด๋ผ๋ฉด ์ด๋๋ ์ง ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ํด๋ฆญํ๊ณ ๋๋ฉด ์์์ ๋ถํฐ ํด๋ฆญํ ๊ณณ๊น์ง ์ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
(์ค๋ช ์ด ์ด๋ ค์ฐ๋ ๊ฐ์๋ฅผ ๋ณด๊ณ ๋จธ๋ฆฌ์์ผ๋ก ์ดํดํด๋ณผ๊ฒ..-๋๊ผฌ์ค-)
function onMouseMove(event) {
const x = event.offsetX;
const y = event.offsetY;
if(!painting) {
ctx.beginPath();
ctx.moveTo(x, y);
}
}
๊ทธ๋ฌ๋ ์์ ์ฝ๋๋ canvas ์์์ ํด๋ฆญํ๊ณ ๋ง์ฐ์ค๋ฅผ ์์ง์ด๋ฉด ๋์ด์ ์๋ํ์ง ์๋๋ค.
์ฐ๋ฆฌ๋ lineTo()๋ผ๋ ๊ฒ์ด ํ์ํ๋ค.
lineTo()๋ ํ์ฌ sub-path์ ๋ง์ง๋ง ์ ์ ํน์ ์ขํ์ ์ง์ ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ค.
path๋ฅผ ๋ง๋ค๊ณ lineTo()๋ฅผ ํธ์ถํ๋ฉด ์ ๊ณผ ์ ์ด ์ฐ๊ฒฐ์ด ๋๋ค.
function onMouseMove(event) {
const x = event.offsetX;
const y = event.offsetY;
if(!painting) {
ctx.beginPath();
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
}
stroke()๋ฅผ ๋ง๋ค์ด์ค๋ค.
stroke()๋ ํ์ฌ์ stroke style๋ก ํ์ฌ์ sub-path์ ํ์ ๊ธ๋ ๊ฒ์ด๋ค.
function onMouseMove(event) {
const x = event.offsetX;
const y = event.offsetY;
if(!painting){
ctx.beginPath();
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
ctx.stroke();
}
}
์๊ทธ๋ ค์ง. ๋๊ผฌ์ค๋ ์๊ทธ๋ ค์ ธ์ ๋ค์ ๊ฐ์์์ ๋ณด์ํ๊ณ ๋ฐํ์ฌ. ์์ฟจ
'JavaScript > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ๋๋ผJS๋ก ๊ทธ๋ฆผํ ๋ง๋ค๊ธฐ] Changing Color (0) | 2021.04.27 |
---|---|
[๋ฐ๋๋ผJS๋ก ๊ทธ๋ฆผํ ๋ง๋ค๊ธฐ] Recap! (0) | 2021.04.27 |
[๋ฐ๋๋ผJS๋ก ๊ทธ๋ฆผํ ๋ง๋ค๊ธฐ] Canvas Events (2) | 2021.04.24 |
[๋ฐ๋๋ผJS๋ก ๊ทธ๋ฆผํ ๋ง๋ค๊ธฐ] Styles part Two (0) | 2021.04.23 |
[๋ฐ๋๋ผJS๋ก ๊ทธ๋ฆผํ ๋ง๋ค๊ธฐ] Styles part One (0) | 2021.04.23 |
๋๊ธ