Today I Learned #23

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

Javascript

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

paintJS strokeStyle - color

paintJS์—์„œ ์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“ค์–ด ์˜จ 9๊ฐœ์˜ div์„ ์ด์šฉํ•˜์—ฌ, ๊ฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น ๋ฒ„ํŠผ์˜ ์ƒ‰์ƒ์œผ๋กœ ํŽœ์˜ ์ƒ‰์ƒ์ด ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

์„ ์–ธ ๋ฐ ์„ค์ •

๊ธฐ์กด์˜ html ํŒŒ์ผ์—๋Š” <div class="controls__color" style="background-color: #2c2c2c"></div>์™€ ๊ฐ™์€ div๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ background-color๋ฅผ ๊ฐ–๊ณ  9๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์žˆ๋‹ค. ๋˜ํ•œ, css์ƒ์˜ cursor: pointer๋กœ ์„ค์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ์ด ๊ฐ€๋Šฅํ•œ ์š”์†Œ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค. ์ดํ›„ js ํŒŒ์ผ์—์„œ const colors = document.getElementsByClassName("jsColor");๋ฅผ ํ†ตํ•ด colors๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋“ค์„ ์„ ์–ธํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

Array.from() & forEach()

Array.from MDN ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— Array.from()์œผ๋กœ์ƒˆArray๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด (length ์†์„ฑ๊ณผ ์ธ๋ฑ์‹ฑ๋œ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด)
  • ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด (Map, Set ๋“ฑ๊ฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด)

document.getElementsByClassName()์„ ํ†ตํ•ด ์–ป์–ด์˜จ ๊ฒฐ๊ณผ๊ฐ’์€ length ์†์„ฑ๊ณผ ์ธ๋ฑ์‹ฑ ๋œ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์—, Array.from()์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด return ๋œ Array๋ฅผ forEach()๋ฅผ ํ†ตํ•ด Array์˜ ๊ฐ๊ฐ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ธ์ž๋กœ์„œ ์ „๋‹ฌ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์˜€๋‹ค.

Array.from(colors).forEach(color =>
color.addEventListener("click", handleColorClick));

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๊ณ , colors์— ์†ํ•œ ์š”์†Œ๋“ค์„ Array๋กœ ๋ฐ”๊พผ ํ›„์—, ๊ฐ๊ฐ์˜ ์š”์†Œ์ธ color์— "click"์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ handleColorClick ํ•จ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ•˜๋Š” event listener๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

handleColorClick()

๊ฐ๊ฐ์˜ color์— ๋Œ€ํ•˜์—ฌ "click" ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ์ƒ‰์ƒ์œผ๋กœ ํŽœ์˜ ์ƒ‰์ƒ์„ ๋ฐ”๊พธ๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜ handleColorClick์˜ ๋‚ด์šฉ์€ ๊ฐ„๋‹จํ•˜๋‹ค.

function handleColorClick(event) {
    const color = event.target.style.backgroundColor;
    ctx.strokeStyle = color;
}

ํ•ด๋‹น div์˜ backgroundColor ์†์„ฑ์„ color๋ผ๋Š” ์ด๋ฆ„์˜ ์ง€์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์ฃผ๊ณ , CanvasRenderingContext2D์˜ ์†์„ฑ์— ํ•ด๋‹นํ•˜๋Š” ctx์˜ strokeStyle์„ ์•ž์„œ ์„ ์–ธํ•œ color๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ƒ‰์ƒ์ด ๋ฐ”๋€œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์‹คํ–‰๊ฒฐ๊ณผ

profile
iOS Developer

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