์บ๋ฒ์ค๋ฅผ ๋ง๋ค์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๊ฒ ํด๋ณด์.
์ฒ์์๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์บ๋ฒ์ค ํ๋๋ง ๋ฐฐ์นํ๋๋ฐ, ๊ณผ์ ์ฒ๋ผ ์๊ณผ ๋๊ป๊ฐ ๋๋ค์ผ๋ก ๋ฐ๋๋ ๊ฒ๋ณด๋ค ์ง์ ์ค์ ํ ์ ์๊ฒ ํ๊ณ ์ถ์ด์ ํด๋ฐ๋ ์ถ๊ฐ๋ก ๋ฐฐ์นํ๋ค. ํด๋ฐ์๋ ์์, ๋๊ป๋ฅผ ์ ๋ ฅ๋ฐ์ input๊ณผ ํ๋ฉด์ ์ด๊ธฐํํ ๋ฒํผ์ ๋ฐฐ์ดํ๋ค.
์บ๋ฒ์ค๋ ๋ค๋ค๋ณธ ์ ์ด ์์ด์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฑฐ์ ๊ทธ๋๋ก ๋ฐ๋ผ ์์ฑํ๊ณ ํ๋์ฉ ์์ ํด๊ฐ๋ค.
์บ๋ฒ์ค์ ํฌ๊ธฐ์ ๋ผ์ธ์ ์์ฑ์ ์ค์ ํ๋ ๋ถ๋ถ์ด๋ค. ํ๋ฉด ํฌ๊ธฐ๊ฐ ๋ณํ ๋ ์บ๋ฒ์ค ํฌ๊ธฐ๋ ๋ฐ๋๋๋ก ํ๊ธฐ ์ํด์ ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
๋ง์ฐ์ค๊ฐ ์์ง์ด๋ฉด mousemove ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ ์ํ๋ผ๋ฉด context๋ฅผ ์ด์ฉํด ์บ๋ฒ์ค์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค. moveTo๋ ์ด์ ์ ์ ์ฅ๋ ๋ง์ฐ์ค์ ์์น๋ก ์์์ ์ ๋ํ๋ด๊ณ , lineTo๋ ์๋ก ๋ฐ์ํ ์ด๋ฒคํธ์ ๋ง์ฐ์ค ์์น๋ก ๋์ฐฉ์ ์ ๋ํ๋ธ๋ค.
์บ๋ฒ์ค์๋ mousedown, mouseup, mouseout, mousemove ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ค. ํด๋ฆญํ์ ๋ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์์ํ๊ณ , ์์ง์ด๋ ๋์ ๋ผ์ธ์ ๊ทธ๋ฆฌ๋ค๊ฐ ํด๋ฆญ์ด ๋๋๊ฑฐ๋ ๋ง์ฐ์ค๊ฐ ์บ๋ฒ์ค๋ฅผ ๋ฒ์ด๋๋ฉด ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์ข ๋ฃํ๋ค.
window์๋ resize์ mousemove ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ค. ํ๋ฉด ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ๊ฒ์ ๋ง์ถฐ ์บ๋ฒ์ค์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐ์ค๊ฐ ํ๋ฉด ์๋๋ก ์ด๋ํ๋ฉด ํด๋ฐ๋ฅผ ๋์์ฃผ๋ ์ญํ ์ ํ๋ค.
ํด๋ฐ์๋ ์ ์ ์๊ณผ ๋๊ป๋ฅผ ๋ฐ๊พธ๋ ๊ธฐ๋ฅ, ํ๋ฉด์ ์ด๊ธฐํํ๋ ๊ธฐ๋ฅ์ด ์๋ค. ํ๋ฉด ์ด๊ธฐํ๋ ์ด์ ์ ๋ง๋ ๋ฆฌ์ฌ์ด์ฆ ํจ์๋ฅผ ์ฌ์ฌ์ฉํ์๋ค.
์บ๋ฒ์ค๋ ํ๋ฉด ์ค์์ ๊ณ ์ ํ๊ณ ๊ทธ๋ฆผ์๋ฅผ ์ด์ฉํด ๋ฐฐ๊ฒฝ๊ณผ ๋ถ๋ฆฌํ์๋ค.
ํด๋ฐ๋ ํ๋ฉด ์๋์ชฝ์ ๊ณ ์ ํ๋๋ฐ, ํ์์๋ ์๋ถ๋ถ๋ง ์ด์ง ๋๋ฌ๋ ์๋ค๊ฐ ๋ง์ฐ์ค๊ฐ ๊ฐ๊น์ด ์์ ํ์ฑํ๋๋ฉด ์์ ํ ๋ณด์ด๋๋ก ํ์๋ค.
์บ๋ฒ์ค๋ฅผ ์ด๋ฒ ๊ณผ์ ์์ ์ฒ์ ์ฌ์ฉํด ๋ดค๋๋ฐ, ์๋ ๋ฐฉ์์ด ์ด์ํด๋ ๋๋ฌด ์ด์ํ๋ค...
์ฐ์ ๋ค๋ฅธ HTML ์์์ canvas๋ ๋ ๋๋ง ๋ฐฉ์๋ถํฐ๊ฐ ๋ค๋ฅด๋ค๊ณ ํ๋ค. ๋ณดํต HTML ์์๋ ์์น์ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ณ์ฐํด์ ๋ฐฐ์นํด ์ฃผ๋๋ฐ, canvas๋ ์ ๋์ ์ธ ํฝ์ ์์น์ ๋ณด์ฌ์ฃผ๋ ์ฐจ์ด๊ฐ ์๊ณ , ๊ณ ํ์ง ๋์คํ๋ ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์ง์ ๋น์จ์ ์ค์ ํด์ ํ์ํ ์ ์๋ค. ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ 300x150์ ํ๋ฉด๋น๋ฅผ ๊ฐ๋๋ค. ์ฒ์์ CSS์์ ์บ๋ฒ์ค ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ณ ํ ์คํธ ํ์ ๋ ๊ทธ๋ฆผ ๋น์จ์ด ์ด์ํ๊ฒ ๊ทธ๋ ค์ ธ์ ํ์ฐธ์ ๊ณ ๋ฏผํ๋๋ฐ, CSS์์ ์บ๋ฒ์ค ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ ๋น์จ์ ์ ์งํ๊ธฐ ์ํด ๊ฐ์ ๋ก ์กฐ์ ํ์ฌ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ํ๊ฒ ๋ณด์ธ๋ค๊ณ ํ๋ค. JS์์ ์ง์ ์์ฑ์ ์ง์ ํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค. ๊ทธ๋์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ์ํด ํฌ๊ธฐ๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด CSS์์ %, vw ๋ฑ์ ์ฌ์ฉํ๋ฉด ์ ๋๊ณ JS์์ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ๊ฐ์งํ์ฌ ์ง์ ์์ฑ์ ์๋ก ์ง์ ํด์ผ ํ๋ค. ๊ฒ๋ค๊ฐ ์ด๋ฐ ์์ผ๋ก ์บ๋ฒ์ค์ ํฌ๊ธฐ๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ, ์ ์ ๊ทธ๋ ค์ก๋ ๊ฒ๋ค์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฆฌ์ฌ์ด์ฆ ์ ์ ์ ๋ณด๋ฅผ ๊ธฐ์ตํด๋๋ค๊ฐ ์๋ก ๊ทธ๋ ค์ค์ผ ํ๋ค.
๋ง์ฐ์ค ์์น์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด ๋ง์ฐ์ค ์ด๋ฒคํธ์์ ์ ๋ฌํ๋ ์ขํ๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฐ์ค ์ด๋ฒคํธ์์ ์ฌ์ฉํ ์ ์๋ ์ขํ๋ ์ด 4๊ฐ์ง๊ฐ ์๋ค. ์ด๋ฒ์ ์ฌ์ฉํ offset ์ธ์๋ screen, page, client๊ฐ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ์ฐจ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ฑ | ๊ธฐ์ค์ | ํน์ง |
---|---|---|
screen | ์ฌ์ฉ์์ ๋ชจ๋ํฐ | ๋ชจ๋ํฐ ์ผ์ชฝ ์๊ฐ (0, 0) |
page | ์ ์ฒด ํ์ด์ง | ๋ง์ฐ์ค๋ฅผ ๊ฐ๋งํ ๋๊ณ ์คํฌ๋กคํ์ ๋ ๊ฐ์ด ๋ณํจ |
client | ์ฌ์ฉ์์๊ฒ ํ์๋๋ ํ์ด์ง | ๋ง์ฐ์ค๋ฅผ ๊ฐ๋งํ ๋๊ณ ์คํฌ๋กคํ์ ๋ ๊ฐ์ด ๊ณ ์ |
offset | event.target | ํ๊ฒ ์์ญ์ ์ผ์ชฝ ์๊ฐ (0, 0) |
์ด๋ฒ ๊ฒฝ์ฐ์๋ canvas ์์ญ์ ๋ํ ์์น๋ฅผ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ offset์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ธฐ์ค์ ์ ์ ํํ ์๊ณ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ด์ํ๊ฒ ๋์ฌ ์ ์๋ค. ํด๋ฐ๋ฅผ ์จ๊ฒผ๋ค๊ฐ ๋ง์ฐ์ค๊ฐ ๊ฐ๊น์ด ์์ ๋ ๋ณด์ฌ์ฃผ๋๋ก ํ๊ธฐ ์ํด window์ ๋ง์ฐ์ค ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์๋๋ฐ, canvas์ ๋์ผํ๊ฒ offset์ ์ฌ์ฉํ์์ ๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
window.addEventListener("mousemove", (event) => {
if (event.offsetY > window.innerHeight * 0.9) {
toolbar.classList.add("active");
} else {
toolbar.classList.remove("active");
}
});
offsetY๋ ํ์ฌ ์์ญ์ ๊ธฐ์ค์ผ๋ก ํ Y ์ขํ๋ฅผ ๋ฐํํ๋ฏ๋ก ๋ง์ฐ์ค๊ฐ body์ ์์ ๋๋ ์ํ๋๋๋ก ์๋ํ๋ค. ๊ทธ๋ฌ๋ ํด๋ฐ๊ฐ ๋๋ฌ๋ ์ํ์์ ๋ง์ฐ์ค๊ฐ ํด๋ฐ ์๋ก ์ฌ๋ผ๊ฐ ๊ฒฝ์ฐ body๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ๊ฐ ์๋ ํด๋ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ๋ก ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ง ์์ ๋ค์ ํด๋ฐ๊ฐ ์จ๊ฒจ์ง๊ฒ ๋๋ค. ๊ฒ๋ค๊ฐ ํด๋ฐ๊ฐ ์จ๊ฒจ์ง๋ ์๊ฐ ๋ค์ body๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ๋ก ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ฐ๊ฐ ๊น๋นก์ด๊ฒ ๋๋ค.
window.addEventListener("mousemove", (event) => {
if (event.clientY > window.innerHeight * 0.9) {
toolbar.classList.add("active");
} else {
toolbar.classList.remove("active");
}
});
offsetY ๋์ clientY๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ง๊ธ์ ํ์ด์ง ์คํฌ๋กค์ด ์๋ ๊ตฌ์ฑ์ด๊ธฐ ๋๋ฌธ์ screen, page, client ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง๋ง, ์คํฌ๋กค์ด ์๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ ์คํฌ๋กค๊น์ง ๊ณ ๋ คํด์ page๋ client ์ค ์๋ง๋ ๊ฒ์ ๊ณจ๋ผ์ผ ํ๋ค.
ํ๋ฅผ ์ ๋ ฌํ๋ ค๊ณ ๊ฒ์์ ํ๋ค๊ฐ velog์ ํ๋ฅผ ๋ง๋๋ ๋ฌธ๋ฒ์ด ์๋ค๋ ๊ฑธ ๋ค๋ฆ๊ฒ ์๊ฒ ๋์๋ค. ๋ญ๋ ๊ฒ์๋ถํฐ ํด๋ณด๊ณ ๋ง๋ค ์๊ฐ์ ํด์ผ ํ๋๋ฐ ์ต๊ด์ด ์ฝ๊ฒ ๊ณ ์ณ์ง์ง ์๋ ๊ฒ ๊ฐ๋ค.
์ข์ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค