๐ ์ด์ด์ง๋ ๊ธ
- ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow)
- ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation()
- ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing)
- ์ด๋ฒคํธ ์์(Event delegation )← Now !
๐ค ์ด๋ฒคํธ ์์์ด๋?
ํ์ ์์์ ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ถ์ด์ง ์๊ณ , ์์์์์์ ํ์ ์์์ ์ด๋ฒคํธ๋ฅผ ์ปจํธ๋กค ํ๋ ๋ฐฉ์
- ์ปจํ ์ด๋์ (์๋ ์์์์๋ ul) ํ๋์ ํธ๋ค๋ฌ๋ฅผ ํ ๋นํจ
- ํธ๋ค๋ฌ์ e.target ์ ์ฌ์ฉํด์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๊ฐ ์ด๋์ธ์ง ์์๋
- ์ํ๋ ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒ์ด ํ์ธ๋๋ฉด ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํจ (์๋ ์์์์๋ tagName์ผ๋ก ํ์ธํจ)
<body>
<ul>
<li>li 1</li>
<li>li 2</li>
<li>li 3</li>
</ul>
</body>
const ul = document.querySelector("ul");
ul.addEventListener("click", function (e) {
const targetli = e.target;
if (targetli.tagName != "LI") return; // li์์ ๋ฐ์ํ ๊ฒ์ด ์๋๋ผ๋ฉด ๋๋
console.log("li clicked ul event..." + targetli.innerHTML);
});
ul์ click ์ด๋ฒคํธ๋ฅผ ์คฌ๋๋ฐ li๋ฅผ ๋๋ฅด๋ฉด ๋์ผํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํจ
→ li๊ฐ 1000๊ฐ ์ ๋ ์์ ๋, ํ๋ํ๋ ์ด๋ฒคํธ๋ฅผ ๋ค ๋ฌ์์ฃผ์ง ์์๋ ๋๋ค๋ ๋ป!
์ด๋ฒคํธ ์์์ ์ฅ์
- ๋ง์ ํธ๋ค๋ฌ๋ฅผ ํ ๋นํ์ง ์์๋ ๋๋ฏ๋ก ์ด๊ธฐํ๊ฐ ๋จ์ํด์ง๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฝ๋จ
- ์์๋ฅผ ์ถ๊ฐํ ๋ ๋ง๋ค ํธ๋ค๋ฌ๋ ๊ฐ์ด ์ถ๊ฐํ์ง ์์๋ ๋๋ฏ๋ก ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง
- innerHTML์ด๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ๋ ์คํฌ๋ฆฝํธ๋ก ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋บ ์ ์๊ธฐ ๋๋ฌธ์ DOM ์์ ์ด ์ฌ์์ง
์ด๋ฒคํธ ์์์ ๋จ์
- ์ด๋ฒคํธ๊ฐ ๊ผญ ๋ฒ๋ธ๋ง ๋์ด์ผ ์คํ๋จ (๊ทผ๋ฐ ๋ช๋ช ์ด๋ฒคํธ์๋ ๋ฒ๋ธ๋ง์ด ์ง์๋์ง ์๋๊ฒ ์์ด์..)
- CPU ์์ ๋ถํ๊ฐ ์๊ธธ ์ ์๋ค(๊ณ ๋ ํ์ง๋ง ์ค์ ๋ก ํฐ ์ํฅ์ ์๋ค๊ณ ํ๋ค)
๐ ์ฐธ๊ณ
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] window.requestAnimationFrame() (0) | 2021.10.07 |
---|---|
[JavaScript] Babel (0) | 2021.09.25 |
[JavaScript] ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation() (0) | 2021.09.17 |
[JavaScript] ์ด๋ฒคํธ ํ๋ก์ฐ(Event Flow) (0) | 2021.09.16 |
๋๊ธ