스크롤 전환

동일 레벨 콘텐츠 간 수직 스크롤 전환

스크롤 전환

스크롤 전환은 페이지가 위아래로 슬라이드하며 전환되는 효과로, 동일한 레벨의 관련 콘텐츠 간 이동 시 사용됩니다. 사용자에게 "다음 섹션으로 이동" 또는 "이전 섹션으로 돌아간다"는 자연스러운 스크롤 경험을 제공합니다.

데모

Loading demo...

UX 원칙

언제 사용하나요?

스크롤 전환은 순차적 콘텐츠 탐색(Sequential Navigation) 시 사용됩니다.

콘텐츠 관계별 적합성

콘텐츠 관계적합성설명
관련 없는 콘텐츠독립적인 섹션은 페이드 사용 권장
형제 관계동일 레벨의 순차적 콘텐츠에 최적
계층 관계부모-자식 구조는 히어로나 핀터레스트 사용 권장

주요 사용 케이스

  • 챕터 네비게이션: 문서나 가이드의 섹션 간 이동
  • 온보딩 플로우: 단계별 튜토리얼이나 설정 과정
  • 타임라인: 시간 순서대로 배열된 콘텐츠
  • 스토리텔링: 이야기 형식의 순차적 콘텐츠

왜 이렇게 동작하나요?

  1. 자연스러운 읽기 흐름: 위에서 아래로 읽는 자연스러운 패턴과 일치
  2. 스크롤 제스처와 일관성: 사용자가 익숙한 스크롤 동작의 연장선
  3. 순서 인지: 콘텐츠의 앞뒤 관계를 직관적으로 이해

모션 디자인

UP 방향 (다음으로):
나가는 화면: 위로 밀려 올라감 (이전 콘텐츠가 위로)
들어오는 화면: 아래에서 올라옴 (다음 콘텐츠가 등장)

DOWN 방향 (이전으로):
나가는 화면: 아래로 내려감 (현재 콘텐츠가 아래로)
들어오는 화면: 위에서 내려옴 (이전 콘텐츠가 복귀)

기본 사용법

import { Ssgoi } from '@ssgoi/react';
import { scroll } from '@ssgoi/react/view-transitions';

const config = {
  defaultTransition: scroll()
};

export default function App() {
  return (
    <Ssgoi config={config}>
      {/* 앱 내용 */}
    </Ssgoi>
  );
}

실전 활용 예시

1. 문서 네비게이션

챕터나 섹션 간 이동:

const config = {
  transitions: [
    {
      from: '/docs/intro',
      to: '/docs/getting-started',
      transition: scroll({ direction: 'up' }),
      symmetric: true  // 뒤로가기 시 자동으로 down
    },
    {
      from: '/docs/getting-started',
      to: '/docs/api',
      transition: scroll({ direction: 'up' }),
      symmetric: true
    }
  ]
};

2. 온보딩 플로우

단계별 튜토리얼:

const config = {
  transitions: [
    {
      from: '/onboarding/step-*',
      to: '/onboarding/step-*',
      transition: scroll({ 
        direction: 'up',
        spring: { stiffness: 300, damping: 30 }
      })
    }
  ]
};

3. 미들웨어를 통한 동적 방향

네비게이션 순서에 따라 방향 자동 결정:

const createMiddleware = (routes) => {
  return (from, to) => {
    const fromIndex = routes.indexOf(from);
    const toIndex = routes.indexOf(to);
    
    if (fromIndex < toIndex) {
      return { from: "/nav/prev", to: "/nav/next" };
    } else {
      return { from: "/nav/next", to: "/nav/prev" };
    }
  };
};

const config = {
  transitions: [
    {
      from: "/nav/prev",
      to: "/nav/next",
      transition: scroll({ direction: "up" })
    },
    {
      from: "/nav/next",
      to: "/nav/prev",
      transition: scroll({ direction: "down" })
    }
  ],
  middleware: createMiddleware(routeOrder)
};

성능 최적화

  • transform: translateY()만 사용하여 GPU 가속 활용
  • 레이아웃 재계산 없이 부드러운 60fps 유지
  • 스크롤 위치 자동 보존으로 추가 계산 불필요

접근성

  • prefers-reduced-motion 설정 시 전환 비활성화
  • 키보드 네비게이션 완벽 지원
  • 스크린 리더에서 계층 구조 올바르게 전달

모범 사례

✅ DO

  • 문서나 가이드의 순차적 섹션 이동에 사용
  • 온보딩이나 튜토리얼 단계에 적용
  • 타임라인 기반 콘텐츠에 활용
  • symmetric 옵션으로 양방향 일관성 유지
  • 모바일의 자연스러운 스크롤 제스처와 연결

❌ DON'T

  • 관련 없는 섹션 간 이동에 사용하지 마세요 (페이드 사용)
  • 계층 구조 탐색에 사용하지 마세요 (히어로나 핀터레스트 사용)
  • 좌우 스와이프와 혼용하지 마세요 (일관성 유지)