Today I Learned #21

YoungToMaturityยท2021๋…„ 1์›” 29์ผ
0

Javascript

๋ชฉ๋ก ๋ณด๊ธฐ
12/17
post-thumbnail

paintJS javascript ์„ค์ • #1

๋ฐ”๋‹๋ผ JS๋กœ ๊ทธ๋ฆผํŒ์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ์ง€๋‚œ ์‹œ๊ฐ„๊นŒ์ง€ html๊ณผ css๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๊ณ , ์š”์†Œ๋“ค์— ๋Œ€ํ•œ ํด๋ฆญ, ๋งˆ์šฐ์Šค ์ด๋™, ๋“œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๋ฐ˜์‘์„ ๊ตฌ์„ฑํ•˜๋Š” javascript ์ž‘์„ฑ์„ ํ•ด๋ณด์•˜๋‹ค.

๊ธฐ๋ณธ ์„ค์ •

const canvas = document.getElementById("jsCanvas");
let painting = false;

๊ธฐ์กด์— jsCanvas๋กœ์„œ id๋ฅผ ์ง€์ •ํ–ˆ๋˜ <canvas>๊ฐ์ฒด๋ฅผ const๋ฅผ ํ†ตํ•ด ์„ ์–ธํ•ด์ฃผ๊ณ , ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ์ค‘์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” painting์„ false๋กœ์„œ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์—ˆ๋‹ค.

onMouseMove

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;
}

onMouseDown

๊ทธ๋ฆผํŒ์˜ ๊ฒฝ์šฐ, ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•œ ์ƒํƒœ๋กœ ๋“œ๋ž˜๊ทธ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฐ๋‹ค.
๋”ฐ๋ผ์„œ ๋งˆ์šฐ์Šค๊ฐ€ ํด๋ฆญ๋œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๋Š” mousedown์„ ์ธ์‹ํ•˜์—ฌ์•ผ ํ•˜๋Š”๋ฐ, ๋”ฐ๋ผ์„œ canvas.addEventListener("mousedown", onMouseDown); ๋‹ค์Œ๊ณผ ๊ฐ™์ด event listener๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ๋˜ํ•œ ํ•ด๋‹น onMouseDown ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์€ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธํ•˜์˜€๋˜ painting์„ true๋กœ ์ •ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

onMouseUp, stopPainting

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();
}

๋กœ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

profile
iOS Developer

0๊ฐœ์˜ ๋Œ“๊ธ€