[WEB] Event(์ด๋ฒคํธ)
๐ Event๋?
- ํ๋ก๊ทธ๋๋ฐ ํ๊ณ ์๋ ์์คํ ์์ ์ผ์ด๋๋ ์ฌ๊ฑด์ ๋๋ค.
- ์ด๋ฒคํธ์ ๋ํ ๋ฐ์์ ์ฝ๋๋ก ์์ฑ์์ผ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋์์ ๋ ์๋์ ์ผ๋ก ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
๐ Event Handler(์ด๋ฒคํธ ํธ๋ค๋ฌ)๋?
ํน์ ํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ์คํ๋๋ ์ฝ๋ ๋ธ๋ญ์ ๋๋ค.
Event Handler๋ฅผ ๋ฑ๋กํ ์ ์๋ ๋ชจ๋ ์์๋ Node๋ฅผ ์์ํ๊ณ , Node๋ Event Target์ ์์ํ๋ฏ๋ก ๋ชจ๋ Element๋ Event Target์ด ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ Element๋ Event Target์ ๋๋ค.
Event Target์ด๋? Event๊ฐ ๋ฑ๋ก๋์ด ์๋ ์์
Event Handler๋ Event Listner๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค.
๐ Event ๋ฐ์ ๊ณผ์
-
ํน์ ํ ์์์ Event Handler๋ฅผ ๋ฑ๋กํ๋ค.
-
๋์ค์ ์ฌ์ฉ์๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ Event Object๋ฅผ ๋ง๋ค์ด์ ๋ฑ๋กํ callback ํจ์์ ์ ๋ฌํ๋ค.
๐ Event Target์ API
์ด๋ฒคํธ ํ๊ฒ์์๋ ์ธ๊ฐ์ API๊ฐ ์์ต๋๋ค.
-
EventTarget.addEventListener()
: ์ด๋ฒคํธ ํ๊ฒ์ ํน์ ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋ก. -
EventTarget.removeEventListener()
: ์ด๋ฒคํธ ํ๊ฒ์ผ๋ก๋ถํฐ ํน์ ํ ์ด์ ํธ ๋ฆฌ์ค๋๋ฅผ ์ง์ -
EventTarget.dispatchEvent()
: ์ด๋ฒคํธ ํ๊ฒ์ ์ธ๊ณต์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํด.
๐ Capturing(์บก์ณ๋ง)๊ณผ Bubbling(๋ฒ๋ธ๋ง)
โช Capturing
Element๋ค์ด ๋ถ๋ชจ์ ์์๋ ธ๋๋ค์ด ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด ๋ ธ๋๋ค์ ๊ฑฐ์ณ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ์บก์ณ๋ง ๊ณผ์ ์ด ์งํ๋ฉ๋๋ค.
๋ถ๋ชจ ์ปจํ ์ด๋์์๋ถํฐ ์์ํด์ ์์ ์ปจํ ์ด๋๊น์ง ์บก์ณ๋ง์ ํตํด ๋ด๋ ค์ค๊ณ ์์ ์ปจํ ์ด๋์ ๋ฑ๋ก๋ Event Handler๋ฅผ ํธ์ถํฉ๋๋ค.
โช Bubbling
๋ฒ๋ธ๋ง์ ์์๋ ธ๋์์ ์์ํด ์์์ ๋ถ๋ชจ์๊ฒ ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.
์์ง๋์ด๊ฐ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ ๋ธ๋ผ์ฐ์ ์์ ์๋์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
๋ฒ๋ธ๋ง์ ๋ฉ์ถ๊ณ ์ถ๋ค๋ฉด stopPropagation()
์ ์ฌ์ฉํ๊ณ , ํ๋์ ์๋ฆฌ๋จผํธ์ ํจ๊ป ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ ๋ฌด์ํ๊ณ ์ถ๋ค๋ฉด stopImmediatePrpagation()
์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ ์์ง๋์ด๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์ด๋ฒคํธ๋ฅผ ๋ฌด์ํ๊ฒ ๋๋ฉด ์์์น ๋ชปํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ํฌ๋ฏ๋ก ์กฐ์ฌํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋์ ์ event.target
๊ณผ event.currnetTart
๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ return
์ ํจ์ผ๋ก์จ ํ์ํ์ง ์์ ์ด๋ฒคํธ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค.
if (event.target !== event.currentTarget) {
return;
}
์ถ์ฒ
-
๋๋ฆผ์ฝ๋ฉ
๐ฌ ์ต์ ๋๊ธ