Zoeeey
Stack flows in you
Zoeeey
  • λΆ„λ₯˜ 전체보기 (155)
    • πŸ’‘ UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • κ°œλ… (42)
      • 정리 (2)
      • λ¬Έμ œν’€κΈ° (ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€, μ½”λ”©μ• ν”Œ) (15)
      • μ‘μš©ν•˜μ—¬ μžλ™ν™”orλ¬Έμ œν•΄κ²°ν•˜κΈ° (2)
      • 기타 (5)
    • βš›οΈ React (49)
      • κ°œλ… (27)
      • κ°œλ…(Redux) (3)
      • 정리 (4)
      • λ¬Έμ œν’€κΈ° (μ½”λ”©μ• ν”Œ: React) (15)
    • πŸ“˜ TypeScript (10)
      • κ°œλ… (8)
      • λ¬Έμ œν’€κΈ° (μ½”λ”©μ• ν”Œ) (2)
    • 🌐 HTML,CSS (18)
      • μ‹€λ¬΄μ—μ„œ 자주 λ°œμƒν•œ 였λ₯˜λ“€ (10)
      • λ’€λŠ¦κ²Œ μ•Œμ•„μ„œ λΌˆμ•„ν”ˆ μœ μš©ν•œ CSS (6)
      • 기타 자주 μ“°λŠ” CSS (2)
    • πŸ’» CS (8)
      • CS (5)
      • μ •κ·œν‘œν˜„μ‹ (2)
      • Git,Github (1)

νƒœκ·Έ

  • redux
  • Ajax
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • object
  • TypeScript
  • CSS
  • UXUI
  • μ½”λ”©μ• ν”Œ
  • useEffect
  • react
  • JavaScript
  • μ‚Όν•­μ—°μ‚°μž
  • json
  • axios
  • Props
  • 였λ₯˜
  • state
  • array
  • CS
  • class
전체 방문자
였늘
μ–΄μ œ
hELLO Β· Designed By μ •μƒμš°.
Zoeeey

Stack flows in you

🟨 JavaScript/μ‘μš©ν•˜μ—¬ μžλ™ν™”orλ¬Έμ œν•΄κ²°ν•˜κΈ°

μžλ™ν™” : νŒμ—… 높이 κ³„μ‚°ν•΄μ„œ μ•„λž˜λ‘œ μŒ“κΈ°

2023. 5. 2. 14:19

상황

맀번 μƒˆλ‘œμš΄ νŒμ—…μ΄ 올라올 λ•Œλ§ˆλ‹€ 1200px μ•„λž˜μ˜ νŒμ—… top값을 κ·Έ μœ„ νŒμ—…μ˜ λ†’μ΄κ°’λ§ŒνΌ μˆ˜λ™μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κ³  있던 μƒν™©μ΄μ—ˆλ‹€.

<div id="pop_84"></div>
<div id="pop_82"></div>
<div id="pop_75"></div>
  1. μœ„μ˜ ν˜•νƒœμ˜ νŒμ—…μ΄ 있으며, 각 νŒμ—…μ€ absolute둜 ν‘œμ‹œλœλ‹€.
  2. νŒμ—… ID λ²ˆν˜ΈλŠ” μœ μ—°ν•˜λ©°, ID λ²ˆν˜ΈλŠ” 항상 변경될 수 μžˆλ‹€. (κ΄€λ¦¬μžμ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©μžμΈ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ§˜λŒ€λ‘œ μ¨λ„£λŠ”λ‹€)
  3. 각 νŒμ—…μ΄ λΈŒλΌμš°μ € λ„ˆλΉ„ 1200px μ΄ν•˜λ‘œ λ–¨μ–΄μ§€λ©΄ 첫 번째 νŒμ—…μ΄ μœ„μ—μ„œ μ•„λž˜λ‘œ μˆœμ„œλŒ€λ‘œ λ°°μΉ˜λœλ‹€.
  4. ν•˜λ‹¨ λ°°μΉ˜λŠ” css top:npx둜 μ œμ–΄λ˜λ©°, 첫 번째 νŒμ—…μ€ top:60px둜 μ‹œμž‘ν•˜κ³  두 번째 νŒμ—…μ€ top:(μœ„μ— μžˆλŠ” νŒμ—…μ˜ 높이 κ°’ + 20px)둜 κ³„μ‚°λ˜μ–΄μ•Ό ν•œλ‹€.

1μ°¨ ν•΄κ²°

const popups = document.querySelectorAll('[id^="pop_"]');
if (window.innerWidth < 1200) {
    let currentTop = 60;
    for (let i = 0; i < popups.length; i++) {
        const popup = popups[i];
        popup.style.top = `${currentTop}px`;
        currentTop += popup.getBoundingClientRect().height + 20;
    }
}

currentTop을 κΈ°λ³Έκ°’ (첫번째 νŒμ—…μ˜ topκ°’)으둜 μ„€μ •ν•΄ λ‘” λ’€, νŒμ—…μ— cssλ₯Ό μ€€  후에 currentTop에 νŒμ—…μ˜ 높이값+20을 λ”ν•˜λŠ” λ°©μ‹μœΌλ‘œ μžλ™ν™”ν•˜μ˜€λ‹€.


문제 λ°œμƒ

νŒμ—…μ„ λ‹«μ§€ μ•Šμ€ μƒνƒœμ—μ„œ λΈŒλΌμš°μ € μ‚¬μ΄μ¦ˆλ₯Ό λŠ˜μ˜€λ‹€ μ€„μ˜€λ‹€ ν–ˆμ„ λ•Œ νŒμ—… 높이값이 λ³€ν•˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.


2μ°¨ ν•΄κ²°

const popups = document.querySelectorAll('[id^="pop_"]');
function positionPopups() {
    if (window.innerWidth < 1200) {
        let currentTop = 60;
        for (let i = 0; i < popups.length; i++) {
            const popup = popups[i];
            popup.style.top = `${currentTop}px`;
            currentTop += popup.getBoundingClientRect().height + 20;
        }
    } else {
        // windowκ°€ 1200보닀 클 μ‹œ 리셋
        for (let i = 0; i < popups.length; i++) {
            const popup = popups[i];
            popup.style.top = '';
        }
    }
}
// νŽ˜μ΄μ§€λ‘œλ“œ μ‹œ ν•¨μˆ˜ 호좜
positionPopups();
// λΈŒλΌμš°μ € λ¦¬μ‚¬μ΄μ¦ˆ μ‹œ λ‹€μ‹œ 호좜
window.addEventListener('resize', positionPopups);

ν•¨μˆ˜λ‘œ λ¬Άμ–΄μ„œ μ„ μ–Έ 후에 windowκ°€ resize될 μ‹œ ν•œλ²ˆ 더 ν˜ΈμΆœν•΄μ£Όμ—ˆλ‹€.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'🟨 JavaScript > μ‘μš©ν•˜μ—¬ μžλ™ν™”orλ¬Έμ œν•΄κ²°ν•˜κΈ°' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ¬Έμ œν•΄κ²° : hashκ°’ λ°›μ•„μ„œ scroll μ‘°μ •ν•˜κΈ°  (0) 2023.05.12
    '🟨 JavaScript/μ‘μš©ν•˜μ—¬ μžλ™ν™”orλ¬Έμ œν•΄κ²°ν•˜κΈ°' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • λ¬Έμ œν•΄κ²° : hashκ°’ λ°›μ•„μ„œ scroll μ‘°μ •ν•˜κΈ°
    Zoeeey
    Zoeeey
    길게 μƒκ°ν•˜κ³  짧게 그리기

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”