Skip to content

javascript_in_depth_6

kyusung edited this page Apr 19, 2017 · 1 revision

๋””์ž์ธ ํŒจํ„ด ์‹ค์šฉ - ์ด๋ฒคํŠธ ๋ธ๋ฆฌ๊ฒŒ์ด์…˜ ํŒจํ„ด

์šฉ๋„

๋‹ค์ˆ˜์˜ HTML์— ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์–ด์•ผ ํ•  ๋•Œ, ํ™œ๋ฐœํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹๋‹ค.
๊ฐ„๋‹จํ•œ ๊ฐœ๋…์€ ๋Œ€ํ‘œ DOM์—๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

์ด๋ฒคํŠธ ์บก์ฒ˜๋ง๊ณผ ๋ฒ„๋ธ”๋ง

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง : ํŠน์ • DOM์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ€์žฅ ํ•˜์œ„ DOM ๋ถ€ํ„ฐ ์ƒ์œ„์˜ ๋ถ€๋ชจ DOM์œผ๋กœ ํ•œ๋‹จ๊ณ„์”ฉ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง : ์ตœ์ƒ์œ„ ๋ถ€๋ชจ DOM ๋ถ€ํ„ฐ ๊ฐ€์žฅ ํ•˜์œ„์˜ DOM๊นŒ์ง€ ๋ถ€๋ชจ์—์„œ๋ถ€ํ„ฐ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ

javascript_in_depth_6_1

์ด๋ฒคํŠธ ์ „๋‹ฌ ์„ธ ๋‹จ๊ณ„

  1. ์บก์ฒ˜๋ง ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ window ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋Œ€์ƒ ๋ถ€๋ชจ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌ๋˜๋Š” ๋‹จ๊ณ„
  2. ๋Œ€์ƒ ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ์ด๋ฒคํŠธ ๋Œ€์ƒ์— ๋„๋‹ฌํ•˜๋Š” ๋‹จ๊ณ„๋กœ ๋Œ€์ƒ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๋ฒ„๋ธ”๋ง์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฒ„๋ธ”๋ง์€ ์ƒ๋žต๋œ๋‹ค.
  3. ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ๋Œ€์ƒ ๋ถ€๋ชจ๋ถ€ํ„ฐ 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>

Example

Clone this wiki locally