"스크럽(scrub)"은 비디오 편집에서 타임라인을 손으로 끌며 앞뒤로 넘겨보는 동작을 가리킵니다. 스크롤 스크럽은 그 타임라인 막대를 스크롤바로 바꾼 것입니다 — 스크롤 컨테이너의 (scrollTop / 최대 스크롤량)을 0~1 진행률로 계산해, 매 스크롤 이벤트(또는 rAF)마다 그 값을 회전각·stroke-dashoffset·여러 트랙 값에 그대로 대입합니다.
트리거 방식(스크롤 리빌처럼 뷰포트에 들어오는 "순간"에 애니메이션을 한 번 재생)과 다른 점이 핵심입니다. 스크럽은 재생 여부가 아니라 진행 위치 자체가 스크롤에 종속됩니다 — 사용자가 스크롤을 5px만 움직이면 애니메이션도 딱 그만큼만 움직입니다. GSAP의 ScrollTrigger가 scrub: true 옵션으로 이 패턴을 대중화했고, CSS 네이티브로는 animation-timeline: scroll()이 같은 개념을 구현합니다.
관성 스크롤(모바일에서 손을 뗀 뒤에도 관성으로 계속 스크롤되는 것)과 만나면 애니메이션이 부드럽게 느려지며 끝나는 장점이 있지만, 스크롤 이벤트가 매우 잦은 환경에서 무거운 연산을 그대로 물리면 프레임이 끊깁니다 — transform·opacity처럼 GPU가 처리하는 속성 위주로 갱신해야 합니다.
언제 쓰나
스크롤 자체가 콘텐츠의 진행을 의미할 때(단계별 설명, 데이터 그래프가 채워지는 연출) 씁니다. 그냥 "등장"만 필요하면 스크롤 리빌로 충분합니다.