์ด๋ฒคํธ
- ๋ธ๋ผ์ฐ์ ๋ ์ฒ๋ฆฌํด์ผ ํ ํน์ ์ฌ๊ฑด์ด ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ(
event
)๋ฅผ ๋ฐ์ ์ํต๋๋ค. - ํน์ ํ์ ์ ์ด๋ฒคํธ์ ๋ํด ํธ์ถ ๋ ํจ์๋ฅผ ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋ ค ํธ์ถ์ ์์ ํ๋ค.
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋ ํจ์๋ฅผ ์ด๋ฒคํธ ํธ๋ค๋ฌ(
event handler
)๋ผ๊ณ ํจ - ์ด๋ฒคํธ๊ฐ ๋ฐ์ ํ์ ๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ํธ๋ค๋ฌ์ ํธ์ถ์ ์์ํ๋ ๊ฒ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก ์ด๋ผ๊ณ ํ๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ํธ์์ฉ์ ์ ์ดํ ์ ์๊ณ ์ด๋ฅผ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ํ๋ก๊ทธ๋๋ฐ ์ด๋ผ ํ๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก
- ์ด๋ฒคํธ ํธ๋ค๋ฌ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋ธ๋ผ์ฐ์ ์ ํธ์ถ์ ์์ํ ํจ์
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก ๋ฐฉ๋ฒ 3๊ฐ์ง
์ธ๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๋ฐฉ์
- HTML ์์์ ์ดํธ๋ฆฌ๋ทฐํธ ์ค์ ์ด๋ฒคํธ์ ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์๋ค.
- ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ผ๋ก ํจ์ ์ฐธ์กฐ๊ฐ ์๋ ํจ์ ํธ์ถ๋ฌธ ๋ฑ์ ๋ฌธ์ ํ ๋นํด์ผํจ
<!DOCTYPE html>
<html>
<body>
<button onclick="sayHi('Lee')">Click me!</button>
<script>
function sayHi(name) {
console.log(`Hi! ${name}.`);
}
</script>
</body>
</html>
- ์ด๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ ์๋ฌต์ ์ผ๋ก ์์ฑ๋ ์ธ๋ฒคํธ ํธ๋ค๋ฌ์ ํจ์ ๋ชธ์ฒด๋ฅผ ์๋ฏธ (ํ์ฑ๋์ด ์ด๋ฒคํธ ํธ๋ค๋ฌ ์๋ฌต์ ์ผ๋ก ์์ฑํ๋ค๋ ์๋ฏธ)
- ๋ฆฌ์กํธ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํจ
์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์
window
๊ฐ์ฒด์Document
,HTMLElement
ํ์ ์DOM
๋ ธ๋ ๊ฐ์ฒด๋ ์ด๋ฒคํธ์ ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์- ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ํจ์๋ฅผ ๋ฐ์ธ๋ฉํ๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฑ๋ก ๋๋ค.
<!DOCTYPE html>
<html>
<body>
<button>Click me!</button>
<script>
const $button = document.querySelector('button');
// ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉ
$button.onclick = function () {
console.log('button click');
};
</script>
</body>
</html>
- ํ๋กํผํฐ์ ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ๋ฐ์ธ๋ฉ ํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
addEventListener ๋ฉ์๋ ๋ฐฉ์
EventTarget.prototype.addEventListener
๋ฉ์๋ ์ฌ์ฉ- ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์๋ ์ด๋ฒคํธ ํ์
, ๋๋ฒ์งธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ , ์ธ๋ฒ์งธ๋ ์ด๋ฒคํธ ์ ํ ๋จ๊ณ๋ฅผ ์ ๋ฌ
์ด๋ฒคํธ ์ ํ ๋จ๊ณ๋ฅผ ์๋ตํ๊ฑฐ๋ false๋ฅผ ์ง์ ํ๋ฉด ๋ฒ๋ธ๋ง ๋จ๊ณ์์ ์ด๋ฒคํธ๋ฅผ ์บ์น, true๋ฅผ ์ง์ ํ๋ฉด ์บก์ฒ๋ง ๋จ๊ณ์์ ์ด๋ฒคํธ๋ฅผ ์บ์น
- ํ๋ ์ด์์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ์ ์๊ณ , ๋ฑ๋ก ์์๋๋ก ์คํ (๋จ, ๋์ผํ ์ด๋ฒคํธ๋ฅผ ์ค๋ณต ๋ฑ๋กํ๋ฉด ํ๋๋ง ๋ฑ๋ก๋จ)
์ด๋ฒคํธ ํธ๋ค๋ฌ ์ ๊ฑฐ
addEventListener
๋ก ๋ฑ๋ก๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉดremoveEventListener
๋ฉ์๋ ์ฌ์ฉ- ๋ฌด๋ช
ํจ์๋ฅผ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ๋ฑ๋กํ๋ฉด ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฐธ์กฐ๋ฅผ ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํด์ผ ํจ.
๊ฐ๊ธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฐธ์กฐ๋ฅผ ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํ์ฌ ์ ๊ฑฐ ํ๋ ๊ฒ์ ๊ถ์ฅ
์ด๋ฒคํธ ๊ฐ์ฒด
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ์ ๊ด๋ จํ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์ด๋ฒคํธ ๊ฐ์ฒด๊ฐ ๋์ ์ผ๋ก ์์ฑ๋จ
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌ.
- ์์ฑ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ ๋จ
- ์ด๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ๋ทฐํธ ๋ฐฉ์์ผ๋ก ๋ฑ๋ก ํ๋ฉด ์ด๋ฒคํธ ๊ฐ์ฒด ์ด๋ฆ์ ๋ฐ๋์ event๋ก ๋ฐ์์ผ๋จ (์๋ฌต์ ์ผ๋ก ํธ๋ค๋ฌ ํจ์ ์์ฑ๋๊ธฐ ๋๋ฌธ์)
์ด๋ฒคํธ ๊ฐ์ฒด์ ์์ ๊ตฌ์กฐ
์์ ๊ตฌ์กฐ
Event
,UIEvent
,MouseEvent
๋ฑ์ ๋ชจ๋ ์์ฑ์ ํจ์ ์ฆ, ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ.์ฆ, ํ๋กํ ํ์ ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋กํ ํ์ ์ฒด์ธ์ ์ผ์.
Event
์ธํฐํ์ด์ค๋DOM
๋ด์์ ๋ฐ์ํ ์ด๋ฒคํธ์ ์ํด ์์ฑ๋๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ๋ํ๋.๋ชจ๋ ์ด๋ฒคํธ ๊ฐ์ฒด์ ๊ณตํต ํ๋กํผํฐ๊ฐ ์ ์๋์ด ์๊ณ , ํ์ ์ธํฐํ์ด์ค์๋ ์ด๋ฒคํธ ํ์ ์ ๋ฐ๋ผ ๊ณ ์ ํ ํ๋กํผํฐ๊ฐ ์ ์.
์ด๋ฒคํธ ๊ฐ์ฒด์ ๊ณตํต ํ๋กํผํฐ
๊ณตํต ํ๋กํผํฐ | ์ค๋ช | ํ์ |
---|---|---|
type | ์ด๋ฒคํธ ํ์ | string |
target | ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ DOM ์์ | DOM ์์ ๋ ธ๋ |
currentTarget | ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฐ์ธ๋๋ DOM ์์ | DOM ์์ ๋ ธ๋ |
target | ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ DOM ์์ | DOM ์์ ๋ ธ๋ |
eventPhase | ์ด๋ฒคํธ ์ ํ ๋จ๊ณ 0: ์์, 1: ์บก์ฒ๋ง, 2: ํ๊น, 3: ๋ฒ๋ธ๋ง |
number |
bubbles | ์ด๋ฒคํธ๋ฅผ ๋ฒ๋ธ๋ง์ผ๋ก ์ ํํ๋์ง ์ฌ๋ถ | boolean |
cancleable | preventDefault ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ ์ ์๋์ง ์ฌ๋ถ | boolean |
defaultPrevented | preventDefault ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๋ฒคํธ๋ฅผ ์ทจ์ ํ๋์ง ์ฌ๋ถ | boolean |
isTrusted | ์ฌ์ฉ์์ ํ์์ ์ํด ๋ฐ์ํ ์ด๋ฒคํธ์ธ์ง ์ฌ๋ถ | boolean |
timeStamp | ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์๊ฐ | number |
๋ง์ฐ์ค ์ ๋ณด ์ทจ๋
- MouseEvent ํ์
์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ ๊ณ ์ ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
๋ง์ฐ์ค ํฌ์ธํฐ์ ์ขํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ
- screenX / screenY : ์ฌ์ฉ์ ๋ชจ๋ํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ
- clientX / clientY : ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์์๊ฒ ์นํ์ด์ง๊ฐ ๋ณด์ฌ์ง๋ ์์ญ์ ๊ธฐ์ค์ผ๋กํ ์ขํ
- pageX / pageY : ์ ์ฒด ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ
- offsetX / offsetY : ์ขํ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋ ์ด๋ฒคํธ๊ฐ ๊ฑธ๋ ค์๋ DOM node๋ฅผ ๊ธฐ์ค์ผ๋ก ์ขํ๋ฅผ ํ์
๋ฒํผ ์ ๋ณด๋ฅผ ๋ํ ๋ด๋ ํ๋กํผํฐ
- altKey
- ctrlKey
- shiftKey
- button
์ด๋ฒคํธ ์ ํ
- DOM ํธ๋ฆฌ ์์ ์กด์ฌ ํ๋ ์์ ๋ ธ๋์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ DOM ํธ๋ฆฌ๋ฅผ ํตํด ์ ํ ๋๋ค.
- ์ด๋ฅผ ์ด๋ฒคํธ ์ ํ(
event propagation
) ์ด๋ผ๊ณ ํ๋ค. - ์ด๋ฒคํธ ๋ฐ์ ์ ์์ฑ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ DOM ์์์ธ ์ด๋ฒคํธ ํ๊ฒ(
event target
)์ ์ค์ฌ์ผ๋ก DOM ํธ๋ฆฌ๋ฅผ ํตํด ์ ํ
์ด๋ฒคํธ๊ฐ ์ ํ๋๋ ๋ฐฉํฅ์ ๋ฐ๋ผ 3๋จ๊ณ๋ก ๊ตฌ๋ถ
- ์บก์ฒ๋ง ๋จ๊ณ(
capturing phase
) : ์ด๋ฒคํธ๊ฐ ์์ ์์์์ ํ์์์๋ก๋ก ์ ํ - ํ๊ฒ ๋จ๊ณ(
target phase
) : ์ด๋ฒคํธ๊ฐ ์ด๋ฒคํธ ํ๊ฒ์ ๋๋ฌ - ๋ฒ๋ธ๋ง ๋จ๊ณ (
bubbling phase
) : ์ด๋ฒคํธ๊ฐ ํ์ ์์์์ ์์ ์์ ๋ฐฉํฅ์ผ๋ก ์ ํ
- ์บก์ฒ๋ง ๋จ๊ณ(
์ฆ, ์ด๋ฒคํธ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ์ด๋ฒคํธ ํ๊น์ ๋ฌผ๋ก ์์ DOM ์์์์๋ ์บ์น ํ ์ ์๋ค.
์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ธ๋ฒ์งธ ์ธ์๋ก capturing ์ฌ์ฉ ์ฌ๋ถ ์ง์ ๊ฐ๋ฅ
๊ธฐ๋ณธ ๊ฐ false๋ก ๋ณดํต ๋ฒ๋ธ๋ง ๋จ๊ณ์์ ์ด๋ฒคํธ๋ฅผ ์บ์นํจ
๋ฒ๋ธ๋ง์ ํตํด ์ ํ ๋์ง ์๋ ์ด๋ฒคํธ๋ ์กด์ฌ ํจ
mouseenter
: ๋ง์ฐ์ค์ปค์๋ฅผ HTML ์์ ์์ผ๋ก ์ด๋ํ์ ๋ ๋ฐ์ (๋ฒ๋ธ๋ง ๋์ง ์๋๋ค.)mouseover
:mouseenter
๋ ๋์ผ, ๋ฒ๋ธ๋ง ๋๋๊ฒ ์ฐจ์ดmouseleave
: ๋ง์ฐ์ค ์ปค์๋ฅผ HTML์์ ๋ฐ์ผ๋ก ์ด๋ํ์ ๋ (๋ฒ๋ธ๋ง ๋์ง ์๋๋ค.)mouseout
:mouseleave
์ ๋์ผ, ๋ฒ๋ธ๋ง ๋๋๊ฒ ์ฐจ์ด
์ด๋ฒคํธ ์์
- ์ด๋ฒคํธ ์์(
event delegation
)์ ์ฌ๋ฌ ๊ฐ์ ํ์DOM
์์์ ๊ฐ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ๋์ ํ๋์ ์์DOM
์์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. - ์ด๋ฒคํธ ์์์ ํตํด ์์ DOM ์์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ฉด ํ์ DOM ์์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ํ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ
target
ํ๋กํผํฐ์currentTarget
ํ๋กํผํฐ๊ฐ ๋ค๋ฅผ ์ ์๋ค.์๋ฅผ๋ค์ด ul ํ๊ทธ์ ํ์ liํ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ
ul ํ๊ทธ์ ํ๋์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋ก
currentTarget์ ulํ๊ทธ ์์, target์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ li ํ๊ทธ ์์
DOM ์์์ ๊ธฐ๋ณธ ๋์ ์กฐ์
DOM
์์๋ ์ ๋ง๋ค ๊ธฐ๋ณธ ๋์์ด ์กด์ฌ- ์ด๋ฒคํธ ๊ฐ์ฒด์
preventDefault
๋ฉ์๋๋ฅผ ํตํด ๊ธฐ๋ณธ ๋์์ ์ค์ง - ์ด๋ฒคํธ ๊ฐ์ฒด์ ์ ํ๋ฅผ ์ค์ง ํ๊ณ ์ถ์ผ๋ฉด
stopPropagation
๋ฉ์๋ ์ฌ์ฉ
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์ this
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ดํธ๋ฆฌ ๋ทฐํธ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ ๋ฑ๋ก์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์
this
๋window
๊ฐ๋ฆฌํจ๋ค. ์๋, ์๋ฌต์ ์ผ๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ (์ผ๋ฐ ํจ์ ํธ์ถ์ this๋ window)
- ๋จ, ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ
this
๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํDOM
์์ ๊ฐ๋ฆฌํด
<!DOCTYPE html>
<html>
<body>
<button onclick="handleClick(this)">Click me</button>
<script>
function handleClick(button) {
console.log(button); // ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํ button ์์
console.log(this); // window
}
</script>
</body>
</html>
์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์๊ณผ addEventListener ๋ฐฉ์
- ๋ ๋ฐฉ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์๋ ๋ด๋ถ์
this
๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํ DOM์์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. - ํ์ดํ ํจ์๋ก ์ ์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์
this
๋ ์์ ์ค์ฝํ์ this๋ฅผ ๊ฐ๋ฆฌํจ๋ค. - class ์ฌ์ฉ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์ this๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํ DOM ์์๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ์ฃผ์ ํด์ผํ๋ค.
- ์๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์๋ ๋ฐ์ธ๋ฉ ์ bind ๋ฉ์๋ ์ฌ์ฉํ์ฌ ํด๋์ค๊ฐ ์์ฑ ํ ์ธ์คํด์ค ๊ฐ๋ฆฌํค๋๋ก ํด์ผํจ
์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ธ์ ์ ๋ฌ
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์ ๋๋ addEventListener ๋ฐฉ์ ์ฌ์ฉ ์ ํจ์ ์์ฒด๋ฅผ ๋ฑ๋กํด์ผ ํจ์ผ๋ก ๋ด๋ถ์ ์ธ์๋ฅผ ์ ๋ฌ ํ ์ ์๋ค.
- ์ธ์ ์ ๋ฌ ํ๋ ค๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์์ ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ธ์ ์ ๋ฌ
- ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ธ์๋ฅผ ์ ๋ฌ
์ปค์คํ ์ด๋ฒคํธ
์ปค์คํ ์ด๋ฒคํธ ์์ฑ
- ์ด๋ฒคํธ ์์ฑ์ ํจ์๋ก ์ด๋ฒคํธ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ์๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์๋ฌต์ ์ผ๋ก ์์ฑ ๋์ ์ด๋ฒคํธ ์ข ๋ฅ์ ๋ฐ๋ผ ์ด๋ฒคํธ ํ์ ์ด ๊ฒฐ์
- ๊ทผ๋ฐ ์ด๋ฒคํธ ์์ฑ์๋ก ์์๋ก ์์ฑํ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฒคํธ ํ์ ์ง์ ๊ฐ๋ฅ
- ์ฆ, ๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ์์ฑํ ์ด๋ฒคํธ๋ฅผ ์ปค์คํ ์ด๋ฒคํธ๋ผ๊ณ ํ๋ค.
// MouseEvent ์์ฑ์ ํจ์๋ก click ์ด๋ฒคํธ ํ์
์ ์ปค์คํ
์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์์ฑ
const mouseEvent = new MouseEvent('click', {
bubbles: true,
cancelable: true,
clientX: 50,
clientY: 100
});
console.log(mouseEvent.clientX); // 50
console.log(mouseEvent.clientY); // 100
// KeyboardEvent ์์ฑ์ ํจ์๋ก keyup ์ด๋ฒคํธ ํ์
์ ์ปค์คํ
์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์์ฑ
const keyboardEvent = new KeyboardEvent('keyup', { key: 'Enter' });
console.log(keyboardEvent.key); // Enter
์ปค์คํ ์ด๋ฒคํธ ๋์คํจ์น
- ์์ฑ๋ ์ปค์คํ
์ด๋ฒคํธ๋
dispatchEvent
๋ฉ์๋๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ํฌ ์ ์๋ค. dispatchEvent
๋ฉ์๋์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด์ ํธ์ถํ๋ฉด ์ธ์๋ก ์ ๋ฌํ ์ด๋ฒคํธ ํ์ ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์.
<!DOCTYPE html>
<html>
<body>
<button class="btn">Click me</button>
<script>
const $button = document.querySelector('.btn');
// ๋ฒํผ ์์์ click ์ปค์คํ
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋ก
// ์ปค์คํ
์ด๋ฒคํธ๋ฅผ ๋์คํจ์นํ๊ธฐ ์ด์ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค.
$button.addEventListener('click', e => {
console.log(e); // MouseEvent {isTrusted: false, screenX: 0, ...}
alert(`${e} Clicked!`);
});
// ์ปค์คํ
์ด๋ฒคํธ ์์ฑ
const customEvent = new MouseEvent('click');
// ์ปค์คํ
์ด๋ฒคํธ ๋์คํจ์น(๋๊ธฐ ์ฒ๋ฆฌ). click ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
$button.dispatchEvent(customEvent);
</script>
</body>
</html>
- ๊ธฐ์กด์ ์ด๋ฒคํธ ํ์
์ด ์๋ ์์์ ์ด๋ฒคํธ ํ์
์ ์ง์ ํ๊ณ ์ถ์ผ๋ฉด
CustomEven
์ด๋ฒคํธ ์์ฑ์ ํจ์ ์ฌ์ฉ
// CustomEvent ์์ฑ์ ํจ์๋ก foo ์ด๋ฒคํธ ํ์
์ ์ปค์คํ
์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์์ฑ
const customEvent = new CustomEvent('foo');
console.log(customEvent.type); // foo
์์์ ์ด๋ฒคํธ ํ์ ์ง์ ๊ฒฝ์ฐ addEventListener ๋ฉ์๋ ์ฌ์ฉํด์ผํจ
on+์ด๋ฒคํธํ์ ์ผ๋ก ์ง์ ๋ ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์
'javascript > ๐ study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํฐ๋ 10์ฃผ์ฐจ]42์ฅ- ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.04.02 |
---|---|
[9์ฃผ์ฐจ ์คํฐ๋]41์ฅ-ํ์ด๋จธ (0) | 2022.03.27 |
[8์ฃผ์ฐจ ์คํฐ๋]39์ฅ-DOM (0) | 2022.03.27 |
[8์ฃผ์ฐจ ์คํฐ๋]38์ฅ-๋ธ๋ผ์ฐ์ ๋ ๋๋ง (0) | 2022.03.27 |
[7์ฃผ์ฐจ ์คํฐ๋]37์ฅ-Set ๊ณผ Map (0) | 2022.03.27 |
๋๊ธ