`IntersectionObserver`로 각 스텝 섹션이 뷰포트에 얼마나 들어왔는지 관찰하다가, 특정 임계값(threshold)을 넘으면 그 스텝을 "활성"으로 표시하고 함께 있는 시각 요소(색상·아이콘·수치)를 바꾼다. 스크롤 이벤트를 직접 매 프레임 읽는 것보다 성능이 좋고 코드도 단순하다.
각 스텝에 `scroll-snap-align`을 주면 스크롤이 스텝 경계에서 멈춰 "한 장씩 넘기는" 느낌이 나고, 주지 않으면 부드럽게 이어지는 느낌이 난다 — 이야기의 리듬에 맞게 고른다.
전통적인 구현(예: scrollama)은 고정된(sticky) 시각 영역 옆으로 텍스트 스텝들이 지나가는 "sticky + step" 구조를 쓴다. 좁은 화면에서는 시각 영역과 텍스트가 겹쳐 가독성이 떨어질 수 있어 모바일용 레이아웃을 별도로 설계하는 경우가 많다.
언제 쓰나
데이터 저널리즘, 제품 스토리, 연차보고서처럼 "순서대로 읽혀야 하는" 콘텐츠에 씁니다. 건너뛰고 싶은 사용자를 위해 목차/스킵 버튼도 함께 두세요.