Next.js · GSAP · SplitText · 3D Glass

스크롤 연동 히어로 섹션


Overview

히어로 섹션을 GSAP ScrollTrigger + SplitText로 구현한 프로젝트입니다. 400vh 높이의 sticky 컨테이너 안에서 글자별 그라디언트 애니메이션, 3D 글래스 패널 입장, 스크롤 기반 패럴랙스 퇴장까지 — 프리미엄 랜딩 히어로의 핵심 패턴을 담았습니다.

SplitText로 분리된 각 글자에 그라디언트 색상을 보간 적용하고, 마스터 타임라인이 badge → 텍스트 → 버튼 → 3D 카드 순으로 오케스트레이션합니다. 스크롤 시에는 글자별 scale + blur 페이드아웃과 카드 패럴랙스가 동시에 진행됩니다.

Anatomy

UI 해부도

히어로 섹션은 sticky 컨테이너 안에 6개의 독립 레이어가 겹쳐진 구조입니다. 중앙의 SplitText 헤드라인을 중심으로 3D 글래스 카드들이 궤도를 따라 배치됩니다.

Logo
로고 · 태그라인
HeroContent
SplitText 헤드라인 · 배지 · CTA
Glass Card 1
Motion Studio 패널 · 3D rotateY 입장
Glass Card 2
로그인 폼 패널 · 좌측 슬라이드인
Glass Card 3
Pixel Flow 패널 · 우측 슬라이드인
GlassOrbit
3D 회전 글래스 오비트

Structure

프로젝트 아키텍처

컴포넌트 기반으로 히어로 섹션의 각 요소를 독립 파일로 분리합니다. 레이아웃 · 콘텐츠 · 글래스 · 유틸리티 4개 레이어로 관심사가 명확히 나뉩니다.

components/GSAP
layout/1
SectionHero.tsx
루트 섹션 · sticky 래퍼 · 패럴랙스 ScrollTrigger
hero/2
HeroContent.jsx
SplitText 헤드라인 · 그라디언트 보간
BgOrbs.jsx
프리셋 기반 배경 그라디언트 블롭
glass/2
GlassWrapper.tsx
글래스모피즘 패널 래퍼 · backdrop-blur
GlassOrbit.jsx
3D 회전 글래스 링 오비트
utils/1
isMobileDevice.js
모바일 디바이스 감지 유틸

Data Flow

컴포넌트 데이터 플로우

초기화 → 마스터 타임라인 → 스크롤 패럴랙스 3단계로 흐릅니다. 각 단계는 독립적으로 구성되어 gsap.context() 안에서 안전하게 관리됩니다.

INIT
SectionHero mountgsap.context()isMobileDevice()
MASTER TL
createMasterTimelinebadge fadeInsub text up3D card rotateY
SCROLL
setupParallaxScrollchar scale+blurhero parallaxcard drift

ANIMATION OUTPUT

HeroContent
글자 그라디언트
char별 backgroundPosition 보간
GlassWrapper
3D 패널 입장
rotateY 240° → 0°
SplitText
글자별 퇴장
scale + blur + opacity
BgOrbs
배경 블롭
그라디언트 Orb 부유

Timeline

애니메이션 타임라인

마스터 타임라인은 약 2.4초 동안 7개 레이어를 오케스트레이션합니다. 배지 · 텍스트가 먼저 진입하고, 3D 카드들이 시차를 두고 rotateY 착지합니다.

0.0s0.4s0.8s1.2s1.6s2.0s2.4s
Badge FadeIn
SplitText Chars
Sub Text
Buttons
Card2 RotateY
Card1 RotateY
Card3 RotateY
배지 위에서 아래로 페이드인
글자별 yPercent + rotateX + blur 해제 (stagger 30ms)
설명 텍스트 y:40 → 0 페이드인
CTA 버튼 그룹 y:35 → 0
좌측 카드 rotateY 240° → 0° 슬라이드인
우측 카드 rotateY -240° → 0° 슬라이드인
하단 카드 rotateY -240° → 0° 슬라이드인

Interaction

인터랙션 플로우

페이지 로드 시 입장 타임라인이 먼저 실행되고, 완료 후 스크롤 패럴랙스가 활성화됩니다. masterTl 진행률이 1 미만이면 패럴랙스가 스킵되어 입장 중 스크롤 충돌을 방지합니다.

PAGE LOAD
Entrance TimelinePHASE 1
  1. 1

    배지 y:-30 → 0 페이드인

    badge fadeIn (0.6s)
  2. 2

    SplitText chars yPercent + rotateX 해제

    stagger: 0.03 per char
  3. 3

    설명 텍스트 · CTA 버튼 순차 진입

  4. 4

    3D 글래스 카드 rotateY 착지

    rotateY: ±240° → 0°
masterTl.progress() < 1 ?
YES — 패럴랙스 스킵입장 미완료 상태에서 스크롤 무시
NO — 패럴랙스 활성char scale+blur + hero 패럴랙스 진행
Scroll ParallaxPHASE 2
  1. 1

    ScrollTrigger progress 0 → 1 추적

    trigger: section, end: bottom bottom
  2. 2

    각 글자별 scale · blur · opacity 개별 계산

    charProgress = clamp(progress)
  3. 3

    PARALLAX config 기반 요소별 y · fade 적용

    data-hero → PARALLAX[key]

Patterns

핵심 기술 패턴

단순히 모션이 예쁜 것이 아니라, 프로덕션에서 유지보수 가능한 구조로 설계했습니다. SplitText 그라디언트 · 3D 카드 입장 · 글자별 퇴장까지 — 실무에서 바로 적용할 수 있는 패턴입니다.

SplitText Gradient
글자별 그라디언트 보간
SplitText chars에 background-position을 인덱스 비율로 계산하여 무지개 그라디언트 효과 구현
s.backgroundPosition = `${(i / total) * 100}% 0`
3D Card Entrance
rotateY 3D 카드 입장
transformPerspective 800px에서 rotateY ±240°로 시작해 0°로 착지하는 카드 플립 인트로
{ rotateY: -240, transformPerspective: 800 }
GSAP Context
라이프사이클 안전성
gsap.context()로 모든 트윈을 스코프화 — 언마운트 시 ctx.revert() 한 줄로 전체 클린업
ctx = gsap.context(() => { ... }, section)
Per-Char Fadeout
글자별 스크롤 퇴장
스크롤 progress에 따라 각 글자의 scale · blur · opacity를 개별 계산하여 순차 소멸
scale: 1 + charProgress * 2 filter: blur(charProgress * 8)
Parallax Config
데이터 기반 패럴랙스
data-hero 속성값을 키로 PARALLAX 객체에서 y · x · rotateY · fade 값을 룩업하여 적용
PARALLAX = { badge: { y: 80, fade: 0.8 } }
Mobile Branch
모바일 최적화 분기
isMobileDevice()로 분기하여 모바일에서는 높이 100vh, 카드 숨김, blur 필터 제거로 성능 확보
if (mobile) section.style.height = '100vh'

Responsive

반응형 전략

데스크탑 퍼스트로 설계하고, 모바일에서는 성능 최적화를 위해 카드 · blur · 패럴랙스를 JS 분기로 완전히 제거합니다.

Desktop1280px+
  • 400vh 높이 패럴랙스
  • 3D 글래스 카드 3개 표시
  • SplitText char별 blur 퇴장
  • GlassOrbit 3D 회전
  • BgOrbs 배경 블롭
Tabletmax-xl~1280px
  • 카드 크기 축소 (max-lg)
  • 패널 위치 · 패딩 조정
  • 폰트 사이즈 스케일
  • GlassOrbit 유지
  • 패럴랙스 동작 유지
Mobilemax-md~768px
  • 높이 100vh (패럴랙스 제거)
  • 글래스 카드 전체 숨김
  • blur 필터 제거 (성능)
  • 전체 h1 fade 애니메이션
  • GlassOrbit 숨김