๋๋ ์ด์ ์ด์์ ~! (์ด๋ฒคํธ ์์ )
๋ธ๋ผ์ฐ์ ์๋ ์์ฒญ๋๊ฒ ๋ง์ ์ด๋ฒคํธ
๋ค์ด ์๋ค.
click
โ ์์ ์์์ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋๋ ์ ๋
contextmenu
โ ์์ ์์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์.
mouseover์ mouseout
โ ๋ง์ฐ์ค ์ปค์๋ฅผ ์์ ์๋ก ์์ง์์ ๋, ์ปค์๊ฐ ์์ ๋ฐ์ผ๋ก ์์ง์์ ๋ ๋ฐ์.
mousedown๊ณผ mouseup
โ ์์ ์์์ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ์์ ๋, ๋ง์ฐ์ค ๋ฒํผ์ ๋ ๋ ๋ฐ์.
mousemove
โ ๋ง์ฐ์ค๋ฅผ ์์ง์ผ ๋ ๋ฐ์.
submit
โ ์ฌ์ฉ์๊ฐ <form>
์ ์ ์ถํ ๋ ๋ฐ์.
focus
โ ์ฌ์ฉ์๊ฐ ๊ณผ ๊ฐ์ ์์์ ํฌ์ปค์ค ํ ๋ ๋ฐ์.
keydown๊ณผ keyup
โ ์ฌ์ฉ์๊ฐ ํค๋ณด๋ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ๋ ๋ ๋ฐ์
DOMContentLoaded
โ HTML์ด ์ ๋ถ ๋ก๋ ๋ฐ ์ฒ๋ฆฌ๋์ด DOM ํธ๋ฆฌ ์์ฑ ์ฆ์ ๋ฐ์.
โ ๏ธ <img>
๋ ์คํ์ผ์ํธ ๋ฑ์ ๊ธฐํ ์์์ ๊ธฐ๋ค๋ฆฌ์ง ์์.
load
- DOM ํธ๋ฆฌ ์์ฑ + ์ด๋ฏธ์ง, ์คํ์ผ์ํธ ๊ฐ์ ์ธ๋ถ ์์๋ ๋ชจ๋ ๋ถ๋ฌ์์ ๋ ๋ฐ์
transitionend
โ CSS ์ ๋๋ฉ์ด์
์ด ์ข
๋ฃ๋์์ ๋ ๋ฐ์.
์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด ์ฌ์ฉํ๋ ํธ๋ค๋ฌ.
ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ๋ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
element.onClick = function () {}
// ํน์
element.attachMent('onclick', function () {})
// ํน์ HTML ์ฝ๋ ์์์ ์ฌ์ฉ
<div onclick ="alert('hello')">ํด๋ฆญ</div>
element.addEventListener ('click', function () {})
๊ฐ์ ๊ธฐ๋ฅ์ ํ๋๋ฐ, ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ํ ๊น?
const element = document.querySelector('#testing');
element.onclick = () => alert('onclick 1๋ฒ ์คํ');
element.onclick = () => alert('onclick 2๋ฒ ์คํ');
element.addEventListener('click', () => alert('addEventListener 1๋ฒ ์คํ'))
element.addEventListener('click', () => alert('addEventListener 2๋ฒ ์คํ'))
onClick
์ ํ๋์ ๋ฆฌ์ค๋๋ง ์ง์ ํ ์ ์๊ณ ,
addEventListener
๋ ์ฌ๋ฌ๊ฐ์ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
addEventListener
๋ IE8 ์ดํ์์ ํธํ๋์ง ์๋๋ค.
addEventListener
๋ 3๋ฒ์งธ ์ธ์๋ก ๋ฒ๋ธ๋ง, ์บก์ณ๋ง ๋์ ์ฌ๋ถ๋ฅผ ์ค์ ํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ์ด๋ฒคํธ ์์์์ ์์๋ณด์ ^ใ
^
์ถ์ฒ: ๊น๋ฒ๊ทธ | DOM ์ด๋ฒคํธ ํ๋ก์ฐ ์๋ฒฝํ๊ฒ ์ ๋ฆฌํด๋๋ฆฝ๋๋ค. ๋ด์ฉ์ ์ ๋ฆฌํ์๋ค.
<html>
<body>
<div></div>
</body>
</html>
div๋ฅผ ๋๋ ๋๋ฐ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๊ฑธ๋ ค์๋ค๋ฉด ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ ๋ง์ฝ ๋ถ๋ชจ ์์์๊ฒ๋ click
์ด๋ฒคํธ๊ฐ ๊ฑธ๋ ค์๋ค๋ฉด?
const h1 = document.querySelector('h1');
h1.addEventListener('click', () => alert('h1 ํด๋ฆญ'));
document.body,addEventListener('click', () => alert('body ์คํ'))
๊ด๋ จ๋ ๊ด๊ณ์๋ค์ด ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด, ์ ์ ์คํ๋๋ค.
currentTarget
: ํ์ฌ ์์. (ํ์ฌ ์คํ์ค์ธ ํธ๋ค๋ฌ๊ฐ ํ ๋น๋ ์์) = this
target
: ์ด๋ฒคํธ๊ฐ ์์๋ ์์
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ๊ด๋ จ๋ ๊ด๊ณ์๋ค์ ๋ชจ๋ ์คํ์์ผ๋ฒ๋ฆฌ๋ฏ๋ก
์ด๋ฒคํธ ํ๋ฆ์ ์ ํ์๊ฐ ์๋ค.
propagation up(์ ํํ๋ค)
๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋งจ ํ์ ์์ ์์์ธ div
๋ฅผ ํด๋ฆญํ์์๋ ๋ถ๊ตฌํ๊ณ
๋ธ๋ผ์ฐ์ (window)์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ๋ถํฐ ์ด๋ฒคํธ๊ฐ ์์๋๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ฒคํธ์ ์ง์ง target.
๋น์ฌ์ ์ด๋ฒคํธ๊ฐ ์์๋๋ ๊ฒ.
propagation down
์ด๋ผ๊ณ ๋ ํ๋ค.
target์์ ๋ธ๋ผ์ฐ์ ๊น์ง ์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๊ฒ์ ๋งํ๋ค.
๋ฐ๋ผ์ ์ด๋ฒคํธ๋
Capture
๐๐ปTarget
๐๐ปBubbie
ํ๋ฆ์ ํตํด
์์์ ํ ๋น๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํธ์ถ๋๋ค.
div ์ด๋ฒคํธ๋ฅผ ์คํ์์ผฐ์ ๋ฟ์ธ๋ฐ, ๋๋ฌด ๋ง์ ๋จ๊ณ๊ฐ ์ค๋ณต๋๊ณ ์๋ค~!~! ๐
ํฉ๋ฆฌ์ ์ด๊ฒ๋, ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ฒคํธ๊ฐ ์์๋ ์น๊ตฌ๋ค์๊ฒ ์ ํ์ง๋ฅผ ์ค๋ค.
์ฆ (currentTarget !== target)
์ธ ๊ฒฝ์ฐ.
[MDN | addEventListener]์ ์ ๊น ์ดํด๋ณด๋ฉด, addEventListener
์ 3๋ฒ์งธ ์ธ์๊ฐ useCapture : false
์ต์
์ธ ๊ฑธ ํ์ธํ ์ ์๋ค.
์ฆ, ๊ธฐ๋ณธ๊ฐ์ bubble์ด๊ณ ๋ ์บก์ณ๋ง์์ ์คํ๋ ๋ ~? ๋ผ๊ณ ๋ฌผ์ด๋ด์ฃผ๋ ๊ฒ ใ
stopPropagation
: ๋ด ๋ค์๋ถํฐ ์ด๋ฒคํธ ํ๋ฆ ๋ฉ์ถฐ~!
currentTarget
: ํ์ฌ ์์. (ํ์ฌ ์คํ์ค์ธ ํธ๋ค๋ฌ๊ฐ ํ ๋น๋ ์์)
target
: ์ด๋ฒคํธ๊ฐ ์์๋ ์์
์์ ๋ฐฐ์ด eventflow์ target ๊ฐ๋ ์ ํตํด ์ด๋ฒคํธ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ ์ฉํ ์ ์๋ค.
const $ul = document.querySelector('ul');
$ul.addEventListener('click', (e) => {
console.log(e.target);
})
์ด๋ฒคํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ๋ธ๋ง์ผ๋ก ๋์ํ๋ค.
์ฆ, ํด๋น ์ด๋ฒคํธ๊ฐ ์๋ ์์ ์์๊น์ง ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋๋ ๋ฐฉ์์ด๋ค.
์ฌ๊ธฐ์ ํ์์์์ธ <li>
๋ฅผ ํด๋ฆญํ๋ฉด ์ด๋ฒคํธ๊ฐ <li>
์์ ์์๋์๊ณ ,
์ค์ ํธ๋ค๋ฌ๊ฐ ํ ๋น๋ ์์๋ ul
์ด๊ธฐ ๋๋ฌธ์
e.target
: <li>
,
e.currentTarget
: <ul>
๊ฐ ๋๋ค.
โ ๏ธ ํด๋ฆญํ ์ง์ ์ด ํ์ ์๋ฆฌ๋จผํธ๋ผ ํ๋๋ผ๋,
์์ ์๋ฆฌ๋จผํธ๋ก ์ฌ๋ผ๊ฐ๋ฉฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์๋์ง ์ฐพ๊ฒ ๋๋ค.
๋ฐ๋ผ์, ์ด๋ฒคํธ ์์์ ํ์ฉํด ์ฌ๋ฌ ๊ฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ ๋์ ,
ํ๋์ ๋ฆฌ์ค๋๋ก ๋น์ทํ ์ผ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค!
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ ๋ฆฌ์ผ | ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ ์๊ฐ
on์ด๋ฒคํธ๋ 1๋ฒ๋ง ๋ฑ๋ก๋์ด ์คํ๋๋๊ฒ์ ๋ฐฐ์๊ฐ๋๋ค.
addEventListener๋ ์ฌ๋ฌ๋ฒ ์ด๋ฒคํธ๊ฐ ์ค์ ๋์ ์๋ชปํ๋ฉด ์ธ๋ฐ์์ด ์ด๋ฒคํธ๊ฐ ์์ด๋๊ฒ ๋ฌธ์ ๊ฐ ๋๊ธดํด์ฌ...ใ ใ ใ
์ํผ์ค์งค ์ธ์๊น์์ต๋๋ค