[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 ๋ฐœ์ƒ ๊ณผ์ •

  1. ํŠน์ •ํ•œ ์š”์†Œ์— Event Handler๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

  2. ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” Event Object๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋“ฑ๋กํ•œ callback ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿ“„ Event Target์˜ API

์ด๋ฒคํŠธ ํƒ€๊ฒŸ์—์„œ๋Š” ์„ธ๊ฐœ์˜ API๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. EventTarget.addEventListener(): ์ด๋ฒคํŠธ ํƒ€๊ฒŸ์— ํŠน์ •ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋ก.

  2. EventTarget.removeEventListener(): ์ด๋ฒคํŠธ ํƒ€๊ฒŸ์œผ๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ์ด์  ํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ง€์›€

  3. EventTarget.dispatchEvent(): ์ด๋ฒคํŠธ ํƒ€๊ฒŸ์— ์ธ๊ณต์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด.

๐Ÿ“„ Capturing(์บก์ณ๋ง)๊ณผ Bubbling(๋ฒ„๋ธ”๋ง)

โ–ช Capturing

Element๋“ค์ด ๋ถ€๋ชจ์™€ ์ž์‹๋…ธ๋“œ๋“ค์ด ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ด ๋…ธ๋“œ๋“ค์„ ๊ฑฐ์ณ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์บก์ณ๋ง ๊ณผ์ •์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ž์‹ ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ์บก์ณ๋ง์„ ํ†ตํ•ด ๋‚ด๋ ค์˜ค๊ณ  ์ž์‹ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ Event Handler๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

โ–ช Bubbling

๋ฒ„๋ธ”๋ง์€ ์ž์‹๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด ์ƒ์œ„์˜ ๋ถ€๋ชจ์—๊ฒŒ ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฒ„๋ธ”๋ง์„ ๋ฉˆ์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด stopPropagation()์„ ์‚ฌ์šฉํ•˜๊ณ , ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ์— ํ•จ๊ป˜ ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ๋„ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด stopImmediatePrpagation()์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์—”์ง€๋‹ˆ์–ด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ฒŒ ๋˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ํฌ๋ฏ€๋กœ ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹ ์— event.target๊ณผ event.currnetTart๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ return์„ ํ•จ์œผ๋กœ์จ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if (event.target !== event.currentTarget) {
  return;
}

์ถœ์ฒ˜

  • ๋“œ๋ฆผ์ฝ”๋”ฉ

  • MDN

Tags:

Categories:

Updated:

Leave a comment