์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง, ์บก์ฒ˜๋ง - 2

๋ฒ„๋ธ”๋ง ์ด๋ฒคํŠธ ์‹ค๋ฌด ์˜ˆ์ œ์™€ ์ด๋ฒคํŠธ ์œ„์ž„์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Jun 6, 2021

๊น€ํ˜„๊ธฐ

#WEB

๋“ค์–ด๊ฐ€๋ฉฐ

์ง€๋‚œ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง, ์บก์ฒ˜๋ง 1ํŽธ์— ์ด์–ด์„œ ์ด๋ฒˆ 2ํŽธ์—์„œ๋Š” ์‹ค๋ฌด ์˜ˆ์ œ์™€ ์ด๋ฒคํŠธ ์œ„์ž„์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ํ”ํžˆ ๋งŒ๋‚ ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง

jsfiddle์— ์˜ˆ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์€

  1. Display video ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด viewBox๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  2. ๋™์˜์ƒ์„ ํด๋ฆญํ•˜๋ฉด ๋™์˜์ƒ์ด ์žฌ์ƒ ๋ฉ๋‹ˆ๋‹ค.
  3. ๋นจ๊ฐ„์ƒ‰ ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด viewBox๊ฐ€ ๋‹ซํž™๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋‚˜์š”?

๋™์˜์ƒ์„ ์žฌ์ƒํ•˜๊ธฐ ์œ„ํ•ด ๋™์˜์ƒ์„ ํด๋ฆญํ•˜๋ฉด ์žฌ์ƒ์€ ๋˜์ง€๋งŒ ํ™”๋ฉด์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ์š”?

์œ„ ์˜ˆ์ œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ทธ๋ฆผ์„ ํ•œ๋ฒˆ ๊ทธ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

image1
  1. Display video ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด viewBox๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  2. ๋™์˜์ƒ์„ ์žฌ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด video๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. window์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ์ด๋ฒคํŠธ๊ฐ€ video๊นŒ์ง€ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.(์บก์ณ๋ง)
  4. video์— ํ• ๋‹น๋œ video.play() ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฒ„๋ธ”๋ง์œผ๋กœ window๊นŒ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.
  6. ์ „ํŒŒ๋˜๋Š” ๋„์ค‘์— viewBox์— ํ• ๋‹น๋œ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋‚˜์„œ ์ด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.(viewBox๋ฅผ ์ˆจ๊น€)
  7. window์—์„œ ์ด๋ฒคํŠธ ํ๋ฆ„์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ˆœ์„œ 6๋ฒˆ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ 4๋ฒˆ์—์„œ ์‹œ์ž‘๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฒ„๋ธ”๋ง์œผ๋กœ ์ธํ•ด window๋กœ ์ „ํŒŒ ๋˜๋ฉด์„œ ์ˆœ์„œ 6๋ฒˆ์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฒ„๋ธ”๋ง ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

Event.stopPropagation()

Event๊ฐ์ฒด์— ์žˆ๋Š” stopPropagation ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

The stopPropagation() method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases

stopPropagation ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„์—์„œ์˜ ์ถ”๊ฐ€ ์ „ํŒŒ๋ฅผ ๋ง‰์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

video.addEventListener('click', (event) => {
  event.stopPropagation();
  video.play();
});

์ตœ์ข… jsfiddle์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

์ด๋ฒคํŠธ ์œ„์ž„(delegation)

๋ฒ„๋ธ”๋ง์„ ์ด์šฉํ•ด์„œ ์ด๋ฒคํŠธ ์œ„์ž„ ํŒจํ„ด์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์œ„์ž„์ด๋ž€ DOM๋‚ด์—์„œ ๊ด€์‹ฌ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋ณด๋‹ค ์ƒ์œ„์— ์œ„์น˜ํ•œ ์—˜๋ฆฌ๋จผํŠธ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ํ–‰์œ„์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์—ฌ๊ธฐ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

jsfiddle

ํŠน๋ณ„ํ•œ ๋™์ž‘์€ ์—†๊ณ  ๊ฐ li ์—˜๋ ˆ๋จผํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ทธ ์•ˆ์— ์žˆ๋Š” textContent๋ฅผ alert์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ดํŽด ๋ณด๋ฉด li ์—˜๋ ˆ๋จผํŠธ๋“ค์„ forEach๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ li์— click ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ• ๋‹น ํ•ฉ๋‹ˆ๋‹ค.

const lists = document.querySelectorAll('li');

lists.forEach((list) => {
  list.addEventListener('click', () => {
    if (event.target.nodeName === 'LI') {
      alert(event.target.textContent);
    }
    return;
  });
});

์ด ์ฝ”๋“œ๋ฅผ ์ด๋ฒคํŠธ ์œ„์ž„์„ ์ด์šฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const root = document.querySelector('.root');

root.addEventListener('click', () => {
  if (event.target.nodeName === 'LI') {
    alert(event.target.textContent);
  }
  return;
});

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ li์˜ ๋ถ€๋ชจ์ธ ul์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

li๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ถ€๋ชจ์ธ ul์—๊ฒŒ ์ด๋ฒคํŠธ ์œ„์ž„์ด ๊ฐ€๋Šฅํ•œ๊ฒƒ์€ ๋ฒ„๋ธ”๋ง๊ณผ event.target์„ ํ†ตํ•ด์„œ ์‹ค์ œ๋กœ ์–ด๋””์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

event.target

์ด๋ฒคํŠธ ์œ„์ž„ ์˜ˆ์ œ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

image2

๋ถ€๋ชจ์—๊ฒŒ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉด Event ๊ฐ์ฒด์˜ target ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ

์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Event.target

event.currentTarget

Event.currentTarget

event.target๊ณผ ๋‹ค๋ฅธ์ ์€ currentTarget์„ ์ด์šฉํ•ด์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” ๋Œ€์ƒ์„ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ๋Š” ul ๋ถ€๋ชจ ์ž์‹ ์ž…๋‹ˆ๋‹ค.

์ตœ์ข… jsfiddle์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

๋งˆ์น˜๋ฉฐ

2ํŽธ์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ํ•œ๋ฒˆ์ฏค์€ ๊ฒช์—ฌ๋ดค์„ ๋ฒ„๋ธ”๋ง ์˜ˆ์ œ์™€ ๋ฒ„๋ธ”๋ง์„ ์ด์šฉํ•œ ์ด๋ฒคํŠธ ์œ„์ž„ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ”ํ•˜๊ฒŒ ๊ณต์‹์ฒ˜๋Ÿผ stop.proPagation()์„ ์‚ฌ์šฉํ•˜๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ ๊ธฐํšŒ๋ฅผ ํ†ตํ•ด ์™œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€, DOM์—์„œ์˜ ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๋‹ฌ ์ฃผ์ œ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋‚˜ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ด๋งŒ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹คโ€ฆ

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋ฌธ์„œ

Grow & Glow ยฉ 2025

Banner images by undraw.co