๋ฐ๋๋ผ JS๋ก ๊ทธ๋ฆผํ์ ๊ธฐ๋ฅ์ ํ๋ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ์ฌ, ์ง๋ ์๊ฐ๊น์ง html๊ณผ css๋ฅผ ๊ตฌ์ฑํ์๊ณ , ์์๋ค์ ๋ํ ํด๋ฆญ, ๋ง์ฐ์ค ์ด๋, ๋๋๊ทธ์ ๊ฐ์ ๋ฐ์์ ๊ตฌ์ฑํ๋ javascript ์์ฑ์ ํด๋ณด์๋ค.
const canvas = document.getElementById("jsCanvas");
let painting = false;
๊ธฐ์กด์ jsCanvas
๋ก์ id๋ฅผ ์ง์ ํ๋ <canvas>
๊ฐ์ฒด๋ฅผ const
๋ฅผ ํตํด ์ ์ธํด์ฃผ๊ณ , ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ํํํ๋ painting
์ false
๋ก์ ์ด๊ธฐํํด์ฃผ์๋ค.
if(canvas)
๋ฌธ์ ํตํ์ฌ canvas
๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ์ฌ์ ์ ํ์ธํ๊ณ , ๋ง์ฝ์ ์กด์ฌํ๋ค๋ฉด ํ์์ init()
์ ํด๋นํ๋ ๋ด์ฉ์ ํด๋น ์กฐ๊ฑด๋ฌธ ์์ ์์ฑํ๋ค. canvas.addEventListener("mousemove", onMouseMove);
๊ฐ์ฅ ๋จผ์ ์์ฑํ ๊ฒ์ ๋ง์ฐ์ค์ ์์ง์์ ํด๋นํ๋ mousemove
์ event listener๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ ์ธํด์ฃผ๊ณ , ํด๋น ํจ์์ ๋ด์ฉ์ ์์ฑํ๋ค. onMouseMove
์ ์ฒซ ์ ์ธ์ผ๋ก์, console.log(event)
๋ฅผ ํ์ฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ํ์ธํ์์๋, event์ ๋ด๋ถ์๋ clientX
์ clientY
, offsetX
์ offsetY
๊ฐ ์๋๋ฐ, client
์ ๊ฒฝ์ฐ๋ ํด๋น ์ฐฝ ์์ฒด์ X์ Y๋ฅผ ์๋ฏธํ๊ณ , offset
์ ๊ฒฝ์ฐ์๋ ํด๋น event๊ฐ ๋ฐ์ํ target์์ ์์ํ๋ X์ Y๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆผํ์ ๊ฒฝ์ฐ๋ event.target
์ ํด๋นํ๋ offsetX
์ offsetY
๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์๋ค.
function onMouseMove(event) {
const x = event.offsetX;
const y = event.offsetY;
}
๊ทธ๋ฆผํ์ ๊ฒฝ์ฐ, ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ ์ํ๋ก ๋๋๊ทธ ํ๋ ๋ฐฉ์์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค.
๋ฐ๋ผ์ ๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ ์ํ๋ฅผ ์๋ฏธํ๋ mousedown
์ ์ธ์ํ์ฌ์ผ ํ๋๋ฐ, ๋ฐ๋ผ์ canvas.addEventListener("mousedown", onMouseDown);
๋ค์๊ณผ ๊ฐ์ด event listener๋ฅผ ์ถ๊ฐํ์๋ค. ๋ํ ํด๋น onMouseDown
ํจ์์ ๋ด์ฉ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ํ๋ฅผ ํํํ๊ธฐ ์ํด ์ ์ธํ์๋ painting
์ true
๋ก ์ ํ๋๋ก ํ์๋ค.
mousedown์ ํตํด true
๊ฐ ๋ painting
์ ํ์ด์ง๋ก ํ์ฌ๊ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ํ, ๋ถ์ ๋ด๋ฆฐ ์ํ๋ฅผ ์๋ฏธํ๋๋ก ํ์๊ณ , ๊ทธ๋ ๋ค๋ฉด ๋ถ์ ๋ค์ด์ฌ๋ฆฌ๋ ์ํ๋ ํ์ด์ง ์์ ์กด์ฌํด์ผ ์ ์์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์, ๋ถ์ ๋ค๊ฒ ๋๋ ์ํ๋ฅผ ์ด๋ค event๋ฅผ ํตํด์ผํ๋์ง ์ ํด์ผ ํ๊ณ , ํด๋ฆญ๋ ๋ง์ฐ์ค ๋ฒํผ์ ๋ค์ด์ฌ๋ฆฌ๋ mouseup
event์, <canvas>
์ ๋ด๋ถ์์ ๋ง์ฐ์ค๊ฐ ๋ฒ์ด๋๋ mouseleave
event๊ฐ ์ ํฉํ๋ค๊ณ ํ๋จํ์๋ค. ๋ฐ๋ผ์ stopPainting
ํจ์๋ฅผ ์์ฑ, painting = false;
๋ฅผ ํ์๋ค.
canvas.addEventListener("mouseup", onMouseUp);
canvas.addEventListener("mouseleave", stopPainting);
mouseup
event์ ๋ํ ์ฝ๋ฐฑ ํจ์๋ก stopPainting
ํจ์๊ฐ ์๋ onMouseUp
์ ์ฌ์ฉํ ์ด์ ๋, stopPainting
์ด์ธ์๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๊ณ , onMouseUp
์ ๋ด๋ถ์๋
function onMouseUp(event) {
stopPainting();
}
๋ก ๊ตฌ์ฑํ์๋ค.