-
Notifications
You must be signed in to change notification settings - Fork 0
javascript_in_depth_6
๋ค์์ HTML์ ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ผ ํ ๋, ํ๋ฐํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ๊ตฌ์ฑํ๋ฉด ์ข๋ค.
๊ฐ๋จํ ๊ฐ๋
์ ๋ํ DOM์๋ง ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ ์ฒ๋ฆฌํ๋ ํจํด์ด๋ค.
์ด๋ฒคํธ ๋ฒ๋ธ๋ง : ํน์ DOM์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ฅ ํ์ DOM ๋ถํฐ ์์์ ๋ถ๋ชจ DOM์ผ๋ก ํ๋จ๊ณ์ฉ ์ ํ๋๋ ๊ฒ ์ด๋ฒคํธ ์บก์ฒ๋ง : ์ต์์ ๋ถ๋ชจ DOM ๋ถํฐ ๊ฐ์ฅ ํ์์ DOM๊น์ง ๋ถ๋ชจ์์๋ถํฐ ์ ํ๋๋ ๊ฒ

- ์บก์ฒ๋ง ๋จ๊ณ : ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ window ๊ฐ์ฒด๋ก๋ถํฐ ๋์ ๋ถ๋ชจ๊น์ง ์์๋๋ก ์ ๋ฌ๋๋ ๋จ๊ณ
- ๋์ ๋จ๊ณ : ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ์ด๋ฒคํธ ๋์์ ๋๋ฌํ๋ ๋จ๊ณ๋ก ๋์์ ๋๋ฌํ์ ๋ ๋ฒ๋ธ๋ง์ ํ์ง ์์ผ๋ฉด ๋ฒ๋ธ๋ง์ ์๋ต๋๋ค.
- ๋ฒ๋ธ๋ง ๋จ๊ณ : ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ๋์ ๋ถ๋ชจ๋ถํฐ window ๊ฐ์ฒด๊น์ง ์ญ์์ผ๋ก ์ ํ๋๋ค.
- ๋ค์์ DOM์ ํ๊บผ๋ฒ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํ ๋นํด์ผ ํ ๋
- ๋์ ์ธ DOM์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๊ทธ๋๊ทธ๋ ํ ๋นํด์ผ ํ ๋
์๋ฅผ ๋ค์ด, 10000๊ฐ์ Cell์ ์ด๋ฒคํธ๋ฅผ ํ ๋นํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ด๊ธฐํ ๋จ๊ณ์์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ํ ๋นํ๋๋ผ ๋ฉ์นซ๊ฑฐ๋ฆฌ๊ฒ ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ด ๋๋น ์ง ์ ์๋ค. ๋ฐ๋ผ์ ์ด๊ธฐํ ๋จ๊ณ์์ ๋ง์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํ ๋นํ๊ธฐ๋ณด๋ค๋ ๊ฐ๋จํ๊ฒ ํ๋์ ๋ถ๋ชจ DOM์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ํ ๋นํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ด๋ฒคํธ ๋ธ๋ฆฌ๊ฒ์ด์ ๋์์ธ ํจํด์ด๋ค.
์ด๋ฒคํธ ์บก์ฒ๋ง์ด๋ ๋ฒ๋ธ๋ง์ ํด์ผํด์ <body>์ฒ๋ผ ์์ฃผ ์์์ DOM์ ์ด๋ฒคํธ๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ๊ฐ๊ฐ์ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ์์์ด ์ง์ HTML DOM๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๊ฑฐ๋ ๊ฒ๋ณด๋ค ๋ง์ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ด๊ธฐํ ๋จ๊ณ์์์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ๋์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฐจ์ด๋ฅผ ์ ๊ณ ๋ คํ์ฌ ์ ๋นํ ์ ์ wrapper๋ฅผ ๊ฒฐ์ ํด์ ์ด๋ฒคํธ ๋ธ๋ฆฌ๊ฒ์ด์
ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ด๋ฒคํธ ๋ธ๋ฆฌ๊ฒ์ด์ ํจํด์ ์ฌ์ฉํ๋ฉด์ class๋ data-*๋ฑ๊ณผ ๊ฐ์ ์์ฑ์ ์ด์ฉํด ์ด๋ DOM์์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ๋์ง ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ ์๋ ์๋ค.
<html>
<body>
<video style="width:480px" id="videoBunny" src="http://media.w3.org/2010/05/bunny/movie.ogv">
</video>
<div id="controlPanel">
<button id="play">Play</button>
<button id="pause">Pause</button>
<button id="volumeUp">Volume+</button>
<button id="volumeDown">Volume-</button>
</div>
<script>
(function () {
var divControlPanel = document.getElementById("controlPanel"),
videoBunny = document.getElementById("videoBunny");
divControlPanel.addEventListener("click", function (e) {
var target = e.target || e.srcElement;
if (target.id === "play") {
videoBunny.play();
} else if (target.id === "pause") {
videoBunny.pause();
} else if (target.id === "volumeUp") {
if (videoBunny.volume <= 0.9) {
videoBunny.volume += 0.1;
} else {
videoBunny.volume = 1;
}
} else if (target.id === "volumeDown") {
if (videoBunny.volume >= 0.1) {
videoBunny.volume -= 0.1;
} else {
videoBunny.volume = 0;
}
}
// ์ด๋ฒคํธ์ ๋ํ ์ ํ๋ฅผ ๋ง๋๋ค
event.stopPropagation();
}, true);
}());
</script>
</body>
</html>