toy-project

🎬 Scroll Interaction Web

슀크둀 μœ„μΉ˜μ— 따라 λ‹€μ–‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ™μž‘ν•˜λŠ” 슀크둀 μΈν„°λž™μ…˜ μ›Ή ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

Sticky Section ꡬ쑰와 슀크둀 λΉ„μœ¨ 계산을 기반으둜
ν…μŠ€νŠΈ, 이미지, λ°°λ„ˆ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

이미지 μ‹œν€€μŠ€ 기법을 μ‚¬μš©ν•˜μ—¬ μŠ€ν¬λ‘€μ— 따라 μ˜μƒμ²˜λŸΌ λ³΄μ΄λŠ” μΈν„°λž™μ…˜ νš¨κ³Όλ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


🌐 Demo

https://hanyiseul.github.io/toy-project/interaction/index.html


⚑ μ‹€ν–‰ 방법 (How to Run)

이 ν”„λ‘œμ νŠΈλŠ” λ³„λ„μ˜ μ„œλ²„ μ‹€ν–‰ 없이 HTML νŒŒμΌμ„ μ—΄μ–΄ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

parallax.html 파일 μ‹€ν–‰

λ˜λŠ”

λΈŒλΌμš°μ €μ—μ„œ parallax.html μ—΄κΈ°

πŸ“Œ 1. ν”„λ‘œμ νŠΈ κ°œμš” (Project Overview)

μ£Όμš” κΈ°λŠ₯


πŸ›  2. 기술 μŠ€νƒ (Tech Stack)

Front-End

Animation

Style


πŸ“‚ 3. ν”„λ‘œμ νŠΈ ꡬ쑰 (Project Structure)

interaction
β”‚
β”œβ”€β”€ assets
β”‚   β”œβ”€β”€ css
β”‚   β”‚   └── index.css
β”‚   β”‚
β”‚   β”œβ”€β”€ fonts
β”‚   β”‚
β”‚   β”œβ”€β”€ img
β”‚   β”‚
β”‚   └── js
β”‚       └── parallax.js
β”‚
β”œβ”€β”€ scss
β”‚   β”œβ”€β”€ _colors.scss
β”‚   β”œβ”€β”€ _fonts.scss
β”‚   β”œβ”€β”€ _parallax.scss
β”‚   β”œβ”€β”€ reset.scss
β”‚   └── index.scss
β”‚
└── parallax.html

πŸ’» 4. 핡심 κ΅¬ν˜„ 기술 (Technical Detail)

Scroll Animation ꡬ쑰

νŽ˜μ΄μ§€λ₯Ό μ—¬λŸ¬ Scene(Section) 으둜 λ‚˜λˆ„κ³ 
슀크둀 μœ„μΉ˜μ— 따라 각 Scene의 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹€ν–‰ν•˜λ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

section0 : intro
section1 : scroll text animation
section2 : image transition
section3 : image sequence animation
section4 : scroll banner
section5 : floating button

각 Scene은 λ‹€μŒ 정보λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 기반으둜 ν˜„μž¬ 슀크둀 μœ„μΉ˜μ— λ§žλŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.


Scroll Ratio 기반 μ• λ‹ˆλ©”μ΄μ…˜

슀크둀 μœ„μΉ˜λ₯Ό λΉ„μœ¨(scrollRatio) 둜 κ³„μ‚°ν•˜μ—¬
DOM μŠ€νƒ€μΌ 값을 λ³€κ²½ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ

opacity
transform
translate
clip-path

이λ₯Ό 톡해 슀크둀 μœ„μΉ˜μ— λ§žλŠ” μžμ—°μŠ€λŸ¬μš΄ μΈν„°λž™μ…˜μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


Image Sequence Animation

μ—¬λŸ¬ μž₯의 이미지λ₯Ό μˆœμ„œλŒ€λ‘œ κ΅μ²΄ν•˜μ—¬
μŠ€ν¬λ‘€μ— 따라 μ˜μƒμ²˜λŸΌ λ³΄μ΄λŠ” μΈν„°λž™μ…˜ 효과λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

LOOPY-1.png
LOOPY-2.png
LOOPY-3.png
...

슀크둀 μœ„μΉ˜μ— 따라 이미지 번호λ₯Ό κ³„μ‚°ν•˜μ—¬
이미지λ₯Ό κ΅μ²΄ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


requestAnimationFrame 기반 μ• λ‹ˆλ©”μ΄μ…˜

슀크둀 이벀트λ₯Ό 직접 μ²˜λ¦¬ν•˜μ§€ μ•Šκ³ 
requestAnimationFrame을 μ‚¬μš©ν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜ 루프λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

scroll event
      ↓
requestAnimationFrame
      ↓
animation loop

이λ₯Ό 톡해

효과λ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ—οΈ 5. μΈν„°λž™μ…˜ 흐름 (Interaction Flow)

μ‚¬μš©μž 슀크둀
      β”‚
      β–Ό
scroll event λ°œμƒ
      β”‚
      β–Ό
ν˜„μž¬ scrollY 계산
      β”‚
      β–Ό
ν˜„μž¬ Scene 계산
      β”‚
      β–Ό
Animation Value 계산
      β”‚
      β–Ό
DOM Style λ³€κ²½
      β”‚
      β–Ό
슀크둀 μΈν„°λž™μ…˜ μ‹€ν–‰

πŸ“‘ 6. 회고 (Retrospective)

πŸ‘ Good

슀크둀 기반 μΈν„°λž™μ…˜μ„ 라이브러리 없이 직접 κ΅¬ν˜„ν•˜λ©΄μ„œ

λ“± μΈν„°λž™μ…˜ κ΅¬ν˜„ 방식에 λŒ€ν•œ 이해도λ₯Ό 높일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ 이미지 μ‹œν€€μŠ€λ₯Ό ν™œμš©ν•˜μ—¬
슀크둀 기반 μ˜μƒ μΈν„°λž™μ…˜ 효과λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


😒 Bad

μ• λ‹ˆλ©”μ΄μ…˜ 둜직이 ν•˜λ‚˜μ˜ JavaScript νŒŒμΌμ— μ§‘μ€‘λ˜μ–΄
μ½”λ“œκ°€ λ‹€μ†Œ κΈΈμ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

λ˜ν•œ Scene ꡬ쑰가 λŠ˜μ–΄λ‚˜λ©΄μ„œ

ν•„μš”μ„±μ„ λŠκΌˆμŠ΅λ‹ˆλ‹€.


πŸ“š Learned

JavaScript

UI / Interaction