๐Ÿ“ [JS ๊ณต๋ถ€๊ธฐ๋ก] 0718~0722

์ œ๋ก ยท2022๋…„ 7์›” 22์ผ
0

[JS ๊ณต๋ถ€๊ธฐ๋ก] TIL โœจ

๋ชฉ๋ก ๋ณด๊ธฐ
11/12

40์žฅ: ์ด๋ฒคํŠธ

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ -> ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก -> ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ˜ธ์ถœ์„ ์œ„์ž„

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก ๋ฐฉ์‹

  1. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹
  • on ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํƒ€์ž…์˜ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐ!
  • ํ•จ์ˆ˜ ์„ ์–ธ์€ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋“ฑ๋ก๋˜๋ฏ€๋กœ ์ฃผ์˜
  • ์ด๋ฒคํŠธ ๊ฐ์ฒด ์ „๋‹ฌ ๋ฐ›์„์‹œ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ event์—ฌ์•„ ํ•œ๋‹ค. e(X)
  1. ํ”„๋กœํผํ‹ฐ ๋ฐฉ์‹
  • DOM ๋…ธ๋“œ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
  • ์ด๋ฒคํŠธ ํƒ€๊นƒ, ์ด๋ฒคํŠธ ํƒ€์ž…, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ง€์ •
  • $button.onclick = () => console.log('button click')
  1. addEventListener ๋ฐฉ์‹
  • ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
  • ์ด๋ฒคํŠธ ํƒ€๊นƒ.(์ด๋ฒคํŠธํƒ€์ž…, ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ, capture ์‚ฌ์šฉ์—ฌ๋ถ€)

์ด๋ฒคํŠธ ๊ฐ์ฒด

  • ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์•”๋ฌต์ ์œผ๋กœ ์ „๋‹ฌ๋จ

  • ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ž„์˜๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ์Œ!

  • ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ๊ณตํ†ต์˜ ํ”„๋กœํผํ‹ฐ

    • type, target, isTrusted, timeStamp ๋“ฑ

๋งˆ์šฐ์Šค ์ •๋ณด ์ทจ๋“

  • clientX/clientY๋Š” ๋ทฐํฌํŠธ ์›นํŽ˜์ด์ง€์˜ ๊ฐ€์‹œ ์˜์—ญ์„ ๊ธฐ์ค€์œผ๋กœ ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋ƒ„

์ด๋ฒคํŠธ ์ „ํŒŒ

  • DOM ์š”์†Œ ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋œ๋‹ค.

    • ์บก์ฒ˜๋ง ๋‹จ๊ณ„ -> ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ -> ํ•˜์œ„ ์ „๋‹ฌ
    • ํƒ€๊นƒ ๋‹จ๊ณ„ -> ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฒคํŠธ ํƒ€๊นƒ์— ๋„๋‹ฌ
    • ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ -> ์ด๋ฒคํŠธ๊ฐ€ ํ•˜์œ„ -> ์ƒ์œ„ ์ „๋‹ฌ
  • ์ด๋ฒคํŠธ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ/ํ”„๋กœํผํ‹ฐ -> ํƒ€๊นƒ, ๋ฒ„๋ธ”๋ง ์ด๋ฒคํŠธ๋งŒ ์บ์น˜ ๊ฐ€๋Šฅ

  • addEventListener -> ํƒ€๊นƒ, ๋ฒ„๋ธ”๋ง, ๊ฐญ์ฒ˜๋ง ์ด๋ฒคํŠธ ๋ชจ๋‘ ๊ฐœ์น˜ ๊ฐ€๋Šฅ - ์„ธ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ true๋กœ!

=> ์ด๋ฒคํŠธ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ด๋ฒคํŠธ ํƒ€๊นƒ์€ ๋ฌผ๋ก  ์ƒ์œ„ DOM ์š”์†Œ์—์„œ๋„ ์บ์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค!

  • ์ด๋ฒคํŠธ ์ „ํŒŒ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด

    • ํฌ์ปค์Šค -> focus/blur
    • ๋ฆฌ์†Œ์Šค -> load/unload/abort/error
    • ๋งˆ์šฐ์Šค -> mouseenter/mouseleave
  • currnetTarget -> ์ด๋ฒคํŠธ๊ฐ€ ๋ถ€์ฐฉ๋œ ๋ถ€๋ชจ ์š”์†Œ ์œ„์น˜ ๋ฐ˜ํ™˜

  • event.target -> ํด๋ฆญํ•œ ์ž์‹ ์š”์†Œ ๋ฐ˜ํ™˜

  • preventDefault ๋ฉ”์„œ๋“œ -> DOM ์š”์†Œ์˜ ๊ธฐ๋ณธ๋™์ž‘ ์ค‘๋‹จ์‹œํ‚ด

  • stopPropagation ๋ฉ”์„œ๋“œ -> ํ•˜์œ„ DOM ์š”์†Œ์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ์ „ํŒŒ ์ค‘๋‹จ์‹œํ‚ด

41์žฅ: ํƒ€์ด๋จธ

  • ํ˜ธ์ถœ ์Šค์ผ€์ค„๋ง

    • ํƒ€์ด๋จธ ํ•จ์ˆ˜(setTimeout, setInterval)๋Š” ์ƒ์„ฑํ•œ ํƒ€์ด๋จธ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋จ
  • JS๋Š” 1๊ฐœ์˜ ์‹คํ–‰์ปจํ…์ŠคํŠธ -> ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ -> ํƒ€์ด๋จธ ํ•จ์ˆ˜ - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฐฉ์‹

setTimeout

  • ์ธ์ˆ˜ - ์ฝœ๋ฐฑํ•จ์ˆ˜, delay(1/1000), ์ฝœ๋ฐฑํ•จ์ˆ˜ ์ธ์ˆ˜
  • ํƒ€์ด๋จธ id๋ฅผ ๋ฐ˜ํ™˜ -> clearTimeout๋กœ ํƒ€์ด๋จธ ์ทจ์†Œ ๊ฐ€๋Šฅ!
  • setInterval ํ•จ์ˆ˜๋Š” ์ „๋‹ฌ๋ฐ›์€ ์‹œ๊ฐ„๋งˆ๋‹ค ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰!
  • ์ธ์ˆ˜๋Š” setTImeou๊ณผ ๊ฐ™์Œ!

๋””๋ฐ”์šด์Šค์™€ ์Šค๋กœํ‹€

  • ์งง์€ ์‹œ๊ฐ„ ์—ฐ์†ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ด์„œ ๊ณผ๋„ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•!

ํƒ€์ด๋จธ ํ•จ์ˆ˜์˜ ํ™œ์šฉ

  • ๋””๋ฐ”์šด์Šค

    • ํŠน์ • ์‹œ๊ฐ„๋ณด๋‹ค ์งง์€ ์ด๋ฒคํŠธ๋Š” ์ฒ˜๋ฆฌํžˆ์ง€ ์•Š๋‹ค๊ฐ€ ๋‚˜์ค‘์— ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ
    • debounce ํ•จ์ˆ˜ -> delay ๋ณด๋‹ค ์งง์œผ๋ฉด ํƒ€์ด๋จธ ์‹œ๊ฐ„์„ ์žฌ์„ค์ •ํ•˜์—ฌ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒํ•จ!
    • ํ™œ์šฉ -> resize ์ด๋ฒคํŠธ์ฒ˜๋ฆฌ, input ์ž…๋ ฅ๊ฐ’ ajax ์š”์ฒญ ์ž๋™์™„์„ฑ UI ๊ตฌํ˜„, ๋ฒ„ํŠผ ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€ ์ฒ˜๋ฆฌ ๋“ฑ
  • ์Šค๋กœํ‹€

    • ์งง์€ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ์—ฐ์† ์ด๋ฒคํŠธ๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ํ˜ธ์ถœ ์ฃผ๊ธฐ๋ฅผ ๋งŒ๋“ฆ
    • scroll ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๋ฌดํ•œ ์Šคํฌ๋กค UI ๊ตฌํ˜„

42์žฅ: ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋™๊ธฐ ์ฒ˜๋ฆฌ

  • ํ•จ์ˆ˜ ์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์— ํ‘ธ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์—!
  • JS -> ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ -> ๋ธ”๋กœํ‚น ํ˜„์ƒ(์ž‘์—…์ค‘๋‹จ)๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

  • ์‹คํ–‰ ์ค‘์ธ ํƒœ์Šคํฌ ์ข…๋ฃŒ ๋˜๊ธฐ ์ „์—๋ผ๋„ ๋‹ค์Œ ํƒœ์Šคํฌ ๊ณง๋ฐ”๋กœ ์‹คํ–‰
  • ๋ธ”๋กœํ‚น ๋ฐœ์ƒX
  • ํƒœ์Šคํฌ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ

์ด๋ฒคํŠธ ๋ฃจํ”„ & ํƒœ์Šคํฌ ํ

  • JS ์—”์ง„

    • ์ฝœ ์Šคํƒ -> ์‹คํ–‰์ปจํ…์ŠคํŠธ ์Šคํƒ
    • ํž™ -> ๊ฐ์ฒด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, ๊ฐ์ฒด๋ฅผ ์ €์žฅ(ํฌ๊ธฐ ๋ชจ๋ฆ„)ํ•˜๊ธฐ ๋•Œ๋ฌธ์— -> ๊ตฌ์กฐํ™”X
  • ์†Œ์Šค์ฝ”๋“œ ํ‰๊ฐ€, ์‹คํ–‰ -> JS์—”์ง„์ด ์ฒ˜๋ฆฌ

  • ๊ทธ ์ด์™ธ์˜ ๊ฒƒ๋“ค๊ณผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ํ‰๊ฐ€ ์‹คํ–‰ -> ๋ธŒ๋ผ์šฐ์ € or Node๊ฐ€ ๋‹ด๋‹น

    • ์ด๋ฒคํŠธ ๋ฃจํ”„

      -> ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ˜น์€ ํƒœ์Šคํฌ ํ์— ๋Œ€๊ธฐ์ค‘์ธ ํ•จ์ˆ˜ ํ™•์ธ ํ›„ ๋น„์–ด์žˆ๋‹ค๋ฉด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฝœ ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œ์‹œํ‚ด

    • ํƒœ์Šคํฌ ํ

      -> ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ํ˜น์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ž„์‹œ๋กœ ๋ณด๊ด€๋˜๋Š” ์žฅ์†Œ(๋Œ€๊ธฐ์žฅ์†Œ)

=> JS(์‹ฑ๊ธ€)์™€ ๋ธŒ๋ผ์šฐ์ €(๋ฉ€ํ‹ฐ)๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰!

profile
Software Developer

0๊ฐœ์˜ ๋Œ“๊ธ€