TIL - 21.07.06 πŸ‘¨β€πŸ’» - Js. μ’Œν‘œ

μ„±ν›ˆΒ·2021λ…„ 7μ›” 6일
0

TIL

λͺ©λ‘ 보기
22/59
post-thumbnail

TIL - 21.07.06 πŸ‘¨β€πŸ’»

μ’Œν‘œ

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ’Œν‘œλŠ” λ‘κ°œμ˜ 기쀀을 가지고 μžˆλ‹€.
μ°½ κΈ°μ€€ μ’Œν‘œμ™€ λ¬Έμ„œ κΈ°μ€€ μ’Œν‘œκ°€ 그것이닀.

  • μ°½ κΈ°μ€€ μ’Œν‘œ(μƒλŒ€ μœ„μΉ˜)
    μŠ€ν¬λ‘€μ— 따라 μ›€μ§μ΄λŠ” 가변적인 μ’Œν‘œμ΄λ‹€.
    μ°½ κΈ°μ€€ μ’Œν‘œλŠ” clientX, clientY둜 ν‘œκΈ°ν•œλ‹€.
    position:fixed 속성을 μ‚¬μš©ν• λ•Œμ™€ 같이 μ°½(window) κΈ°μ€€μœΌλ‘œ μ™Όμͺ½ μœ„ λͺ¨μ„œλ¦¬λ₯Ό κΈ°μ€€μœΌλ‘œ μ’Œν‘œλ₯Ό κ³„μ‚°ν•˜λ©° position:fixed와 ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ μ‹œλ„ˆμ§€κ°€ μ’‹λ‹€.

  • λ¬Έμ„œ κΈ°μ€€ μ’Œν‘œ(μ ˆλŒ€ μœ„μΉ˜)
    슀크둀 ν•˜λ”λΌλ„ λ³€ν•˜μ§€ μ•ŠλŠ”, λ¬Έμ„œ κΈ°μ€€μ˜ μ’Œν‘œμ΄λ‹€.
    λ¬Έμ„œ κΈ°μ€€ μ’Œν‘œμ˜ κ²½μš°λŠ” μ’Œν‘œλ₯Ό pageX, pageY둜 ν‘œκΈ°ν•œλ‹€.
    position:absolute와 μœ μ‚¬ν•˜κ²Œ λ¬Έμ„œ μ΅œμƒλ‹¨(root)μ—μ„œ λ¬Έμ„œ 맨 μœ„ μ™Όμͺ½ λͺ¨μ„œλ¦¬λ₯Ό κΈ°μ€€μœΌλ‘œ μ’Œν‘œλ₯Ό κ³„μ‚°ν•œλ‹€.

슀크둀 ν• λ•Œ pageYλŠ” λ³€ν•˜μ§€ μ•Šμ§€λ§Œ clientYλŠ” μ°½ μƒλ‹¨κ³Όμ˜ 거리가 달라지기에 값이 λ³€ν•œλ‹€.

고둜 page κ°’κ³Ό clientκ°’μ˜ κ΄€κ³„λŠ” λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆλ‹€.

pageX = clientX + μ„Έλ‘œ μŠ€ν¬λ‘€ν•œ 거리
pageY = clientY + κ°€λ‘œ μŠ€ν¬λ‘€ν•œ 거리


element.getBoundingClientRect()

getBoundingClientRect λ©”μ†Œλ“œλŠ” μš”μ†Œλ₯Ό κ°μ‹ΈλŠ” κ°€μž₯ μž‘μ€ λ„€λͺ¨μ˜ μ°½ κΈ°μ€€ μ’Œν‘œλ₯Ό 객체 ν˜•νƒœλ‘œ λ°˜ν™˜ν•œλ‹€.
즉, μƒλŒ€μœ„μΉ˜λ₯Ό κ΅¬ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

λ°˜ν™˜λ˜λŠ” κ°’μ˜ ν”„λ‘œνΌν‹° ν‚€λ‘œλŠ” x, y, width, height, left, right, top, bottom이 μžˆλ‹€.

width와 heightλŠ” ν‚€ κ°’μ—μ„œλ„ μ•Œ 수 μžˆλ“―, 컨텐츠(μš”μ†Œ)의 높이와 λ„ˆλΉ„λ₯Ό λœ»ν•œλ‹€.

x와 yλŠ” μš”μ†Œμ˜ 쒌츑 λͺ¨μ„œλ¦¬ μœ—μͺ½ 끝이 각각 창의 μ™Όμͺ½κ³Ό μœ—μͺ½ λ©΄λΆ€ν„° μ–Όλ§ˆλ§ŒνΌ λ–¨μ–΄μ Έ μžˆλŠ”μ§€λ₯Ό μ˜λ―Έν•œλ‹€.

그리고 left, right와 top, bottom은 νŒŒμƒ ν”„λ‘œνΌν‹°μΈλ° μ΄λŠ” width와 heigthκ°€ μŒμˆ˜κ°€ λ˜λŠ” λͺ‡λͺ‡ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.

left = x ; 창의 μ’ŒμΈ‘μ—μ„œ 컨텐츠(μš”μ†Œ) μ’ŒμΈ‘κΉŒμ§€
right = x + width ; 창의 μ’ŒμΈ‘μ—μ„œ 컨텐츠 μš°μΈ‘κΉŒμ§€
top = y ; 창의 μœ— λͺ¨μ„œλ¦¬μ—μ„œ 컨텐츠 μœ— λΆ€λΆ„κΉŒμ§€
bottom = y + height ; 창의 μœ— λͺ¨μ„œλ¦¬μ—μ„œ 컨텐츠 μ•„λž« λΆ€λΆ„κΉŒμ§€


element.offset API

offset APIλŠ” μš”μ†Œμ˜ μƒμœ„ μš”μ†Œμ— position: relative 속성이 적용된 μš”μ†Œκ°€ μ—†μ„λ•Œ μš”μ†Œμ˜ μ ˆλŒ€ μ’Œν‘œλ₯Ό μˆ«μžμ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

offset APIλŠ” element.offsetTop, element.offsetLeft, element.offsetWidth, element.offsetHeight κ°€ μžˆλ‹€.

position: relative 속성이 μ—†μ–΄μ•Όν•œλ‹€κ³  ν–ˆλŠ”λ° λ§Œμ•½ μƒμœ„ λ…Έλ“œμ— ν•΄λ‹Ή 속성이 적용된 λ…Έλ“œAκ°€ μžˆλ‹€λ©΄ κ·Έ λ…Έλ“œ A κΈ°μ€€μœΌλ‘œ μƒλŒ€μ μΈ μ’Œν‘œκ°€ λ°˜ν™˜λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

였늘 κ³΅λΆ€ν•˜λ©° μ§šμ€ 포인트

textContent vs innerHTML(innerText)

이 두 λ©”μ†Œλ“œλ₯Ό λΉ„κ΅ν•˜λ©° innerHTML이 곡격에 μ·¨μ•½ν•˜λ‹€κ³ λ§Œ 적어놓고 μ™œ μ·¨μ•½ν•œμ§€λŠ” λͺ¨ν˜Έν•˜κ²Œ μ μ–΄λ†¨μ—ˆλ‹€. λ‚˜λ„ λͺ…ν™•ν•˜κ²Œ λͺ°λžκ±°λ“ 
였늘 κ³΅λΆ€ν•˜λ©° μ°Ύμ•„λ³΄λ‹ˆ textContent와 innerHTML은 μš”μ†Œ λ‚΄λΆ€ ν…μŠ€νŠΈμ— μ ‘κ·Όν•  수 μžˆλŠ”κ±΄ κ°™μ§€λ§Œ innerHTML을 μ‚¬μš©ν•˜λ©΄ HTML νƒœκ·Έλ„ μΈμ‹μ‹œν‚¬ 수 μžˆκΈ°μ— <script> νƒœκ·Έλ‘œ 곡격 받을 여지가 μžˆλŠ” 취약점이 μƒκΈ°λŠ”κ±° μ˜€λ‹€.

innerText의 경우 λ³΄μ•ˆ 취약점은 μ—†μ§€λ§Œ νƒœκ·Έλ₯Ό 읽을 수 μžˆλŠ” 점은 κ°™κ³  이둜 인해 νŒŒμ‹± 속도가 λŠλ €μ„œ IE ν™˜κ²½μ΄ μ•„λ‹ˆκ³ μ„œμ•Ό μ‚¬μš©ν•˜κΈ° μ ν•©ν•˜μ§€ μ•Šλ‹€.

λ‹€λ§Œ μŠ€νƒ€μΌμ΄ 적용된 ν…μŠ€νŠΈλ₯Ό 읽어와야 할땐 μœ μš©ν•˜λ‹€.

λ‹· λ…Έν…Œμ΄μ…˜μœΌλ‘œ 이벀트 μ‹€ν–‰ vs addEventListener λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°

사싀 객체 μ‹€ν–‰μ—μ„œλ„ κ·Έλ ‡κ³  λ‹· λ…Έν…Œμ΄μ…˜μœΌλ‘œ μ‹€ν–‰ν•˜λ©΄ 보기 νŽΈν•˜κ³  μ“°κΈ° μ‰¬μš΄ 것 말고 μž₯점은 μ—†λŠ” λ“― ν•˜λ‹€.

addEventListener 같은 κ²½μš°λŠ” μ—¬λŸ¬ 개의 ν•Έλ“€λŸ¬λ₯Ό λ‹€λ£° 수 μžˆλŠ” μž₯점이 있고 캑쳐 페이슀 μ‹€ν–‰μ—¬λΆ€λ₯Ό 선택할 수 μžˆλ‹€.

캑쳐 νŽ˜μ΄μ¦ˆλŠ” μš”κΈ°μ„œ 확인 ν•  수 μžˆλ‹€.

GOOD πŸ˜‰

μ˜€λŠ˜μ€ μ’Œν‘œ, 돔 이벀트, μ •κ·œ ν‘œν˜„μ‹μ„ μ΅ν˜”λ‹€.
였늘 OiMW 많이 썼닀.

BAD πŸ˜₯

κ³ μ°¨ν•¨μˆ˜ μ˜ˆμŠ΅μ„ μ „ν˜€ λͺ»ν–ˆλ‹€.

TO DO πŸ”₯

  • κ³ μ°¨ν•¨μˆ˜
  • react
  • node.js

Retrospect 🧐

였늘 λ„ˆλ¬΄ 정신없이 μ‹œκ°„μ„ λ³΄λ‚΄μ„œ μ‹œκ°„ κ°€λŠ”μ€„λ„ λͺ¨λ₯΄κ³  λͺ°λ‘ν–ˆλ‹€.

ν¬μŠ€νŒ…λ„ κΈ°μ„Έκ°€ λΆ™μœΌλ‹ˆ μž¬λ°Œμ–΄μ„œ ν­μ£Όν•΄μ„œ ν¬μŠ€νŒ…ν•˜λŠ” λ‚΄ λͺ¨μŠ΅μ„ λ³Ό 수 μžˆμ—ˆλ‹€.

뭐 μ’‹μ€κ²Œ 쒋은거 μ•„λ‹Œκ°€
μ˜ˆμŠ΅ν•  μ‹œκ°„ 없어진건 μ•ˆμ’‹μŒ

Reference πŸ™‡

https://mommoo.tistory.com/85
https://poiemaweb.com/
https://ko.javascript.info/

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€