Parallax

Parallax

물체λ₯Ό λ‹€κ°λ„μ—μ„œ κ΄€μ°°ν•  λ•Œ λ°œμƒν•˜λŠ” λ³€ν™”λ‚˜ 이동을 λ‚˜νƒ€λ‚΄λŠ” ν˜„μƒ

Parallax Scrolling

λ ˆμ΄μ–΄μ˜ μš”μ†Œλ“€μ˜ μŠ€ν¬λ‘€λ˜λŠ” 속도λ₯Ό λ‹€λ₯΄κ²Œν•˜μ—¬ νŽ˜μ΄μ§€μ˜ 깊이감(μž…μ²΄κ°)을 μ£ΌλŠ” 효과

  • μ‹œκ°μ μœΌλ‘œ λ©€λ¦¬μžˆλŠ” λ¬Όμ²΄λŠ” 느리게 μ΄λ™λ˜λŠ”κ²ƒμ²˜λŸΌ λŠκ»΄μ§€κΈ° λ•Œλ¬Έμ— 느리게 μŠ€ν¬λ‘€λ˜λŠ” μš”μ†ŒλŠ” λΉ λ₯΄κ²Œ μŠ€ν¬λ‘€λ˜λŠ” μš”μ†Œλ³΄λ‹€ 뒀에 μžˆλ‹€κ³  μƒκ°ν•˜κ²Œ λœλ‹€.

λͺ¨λ°”μΌμ—μ„œλŠ” ꢌμž₯ν•˜μ§€ μ•ŠλŠ” 기법이닀.

  • νŽ˜λŸ΄λ ‰μŠ€ μŠ€ν¬λ‘€λ§μ€ 좔가적인 κ·Έλž˜ν”½ 처리λ₯Ό ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯상 뢀담이 μžˆλ‹€. (λͺ¨λ°”일은 λ‹€λ₯Έ κΈ°κΈ°ν™˜κ²½μ— λΉ„ν•΄ μ„±λŠ₯의 μ œμ•½μ΄ 있음)

  • λͺ¨λ°”일 κΈ°κΈ°λŠ” ν™”λ©΄ μ „ν™˜μ΄ 자유자재둜 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— ν™”λ©΄ λ„ˆλΉ„, 슀크둀 높이가 μ‰½κ²Œ λ°”λ€Œμ–΄ μ˜λ„ν•œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆμ–΄ μ‚¬μš©μ„±μ΄ μ €ν•˜λ¨

  • 보닀 μ œν•œλœ 기기의 λ„ˆλΉ„μ‚¬μ΄μ¦ˆμ—μ„œ 이런 μƒν˜Έμž‘μš©λ“€μ΄ 컨텐츠λ₯Ό νƒμƒ‰ν•˜λŠ”λ° 였히렀 λ°©ν•΄κ°€ 될 수 μžˆλ‹€.

이런 이유둜 λͺ¨λ°”μΌμ—μ„œλŠ” νŒ¨λŸ΄λ ‰μŠ€ κΈ°λŠ₯을 μ œν•œν•˜λŠ”κ²ƒμ„ 고렀해봐야 ν•œλ‹€.

κΈ°λŠ₯ κ΅¬ν˜„

  • 슀크둀 감지

  • ν™”λ©΄ λ‚΄ 슀크둀 μœ„μΉ˜ β†’ μ–Όλ§ˆλ‚˜ 슀크둀 λ˜μ—ˆλŠ”μ§€

  • νŽ˜λŸ΄λ ‰μŠ€λ₯Ό μ μš©ν•  μš”μ†Œλ“€μ˜ μ›€μ§μž„ μ œμ–΄ (λΉ λ₯΄λ©΄ μ•ž, 느리면 λ’€)

슀크둀 감지

  • scroll event listener

슀크둀 μœ„μΉ˜

  • window.scrollx β†’ μˆ˜ν‰μœΌλ‘œ μ–Όλ§ˆλ‚˜ 슀크둀 λλŠ”μ§€ px

  • window.scrolly β†’ 수직으둜 μ–Όλ§ˆλ‚˜ 슀크둀 λλŠ”μ§€ px

μš”μ†Œμ˜ μ›€μ§μž„ μ œμ–΄

  • 슀크둀 μœ„μΉ˜ 값을 κ³„μ‚°ν•˜μ—¬ translateY 속성을 톡해 μš”μ†Œμ˜ μ›€μ§μž„μ„ μ œμ–΄

  • 멀리 μžˆλŠ”(적게 μ›€μ§μ΄λŠ”) μš”μ†ŒλŠ” 슀크둀 κ°’μ΄λž‘ λΉ„μŠ·ν•˜κ²Œ κ°€μ Έκ°€λ©΄ λœλ‹€.

    • κ°€κΉκ²Œ μžˆλŠ”(많이 μ›€μ§μ΄λŠ”) μš”μ†ŒλŠ” 슀크둀 κ°’ 보닀 더 크게 가져감

CSS perspective

μš”μ†Œμ˜ 깊이감, 원근감을 λΆ€μ—¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” CSS 3D 속성

  • μš”μ†Œμ™€ μ‚¬μš©μž ν™”λ©΄κ°„μ˜ 거리

  • 값이 μž‘μ„μˆ˜λ‘ transform νš¨κ³Όκ°€ 강해짐

    • 값이 μž‘μœΌλ©΄ κ°€κΉκ²Œ 있고, 값이 크면 λ©€λ¦¬μžˆμŒ

  • transform 효과λ₯Ό μ μš©ν•  μš”μ†Œμ˜ λΆ€λͺ¨μ— 적용

  • μžμ‹ μš”μ†Œλ“€μ˜ translateZλ₯Ό λ‹€λ₯΄κ²Œ μ€˜μ„œ 슀크둀 속도λ₯Ό λ‹€λ₯΄κ²Œ λ§Œλ“€ 수 μžˆλ‹€.

    • translateZ에 μž‘μ€ 값을 넣을 수둝 λ©€λ¦¬μžˆκ²Œ ν‘œν˜„λœλ‹€.

.parent {
  perspective: 1px;
}

.children {
  position: absolute;
}

.children-A {
  transform: translateZ(-1px);
}

.children-B {
  transform: translateZ(-2px);
}

CSS둜 κ΅¬ν˜„ν•˜λŠ” 것은 JS둜 κ΅¬ν˜„ν•˜λŠ”κ²ƒμ— λΉ„ν•΄ 가볍고 효율적(GPU 처리)μ΄μ§€λ§Œ 직접 μ‘°μž‘ κ°€λŠ₯ν•œ μΈν„°λ ‰ν‹°λΈŒ μš”μ†Œκ°€ μ œν•œμ μ΄λ‹€.

Last updated