Stimulus 컨트롤러를 이용한 스티키 상태 감지
본 솔루션은 IntersectionObserver
API를 활용하여 스티키 요소의 상태 전환을 감지하는 Stimulus 컨트롤러를 구현합니다.
IntersectionObserver
설정:root
: 관찰할 루트 요소(기본값은 뷰포트).rootMargin
: 루트 요소 주변의 마진을 조정하여IntersectionObserver
가 트리거되는 경계를 정의합니다. 특히,'-1px 0px 0px 0px'
값은 스티키 요소가 뷰포트 상단(또는 지정된 루트)에서 정확히 1px 떨어진 순간에 트리거되도록 하여 고정 상태 전환을 정밀하게 포착합니다.threshold
: 대상 요소가 루트와 교차하는 비율을 지정하며, 여기서는1.0
으로 설정되어 요소가 완전히 교차할 때를 기준으로 합니다.
- 상태 감지 로직:
_handleIntersect
메서드는IntersectionObserver
콜백으로,entry.isIntersecting
속성을 통해 요소가 루트와 교차하는지 여부를 판단합니다.!entry.isIntersecting
은 요소가 고정(stuck) 상태임을 의미합니다._toggleStuckState
메서드는 감지된isStuck
상태에 따라 요소에stuckClassValue
를 토글하고,dispatchEventsValue
가true
일 경우stuck
또는unstuck
이벤트를 발생시킵니다.
- 동적 상호작용:
- 이벤트 디스패치 기능을 통해 스티키 요소의 상태 변화에 따라 동적으로 스타일을 업데이트하거나, 애니메이션을 트리거하거나, 분석 이벤트를 추적하는 등 다양한 사용자 경험 개선 기능을 구현할 수 있습니다.
미래의 CSS scroll-state()
함수
Chrome 133 Beta에서 도입된 scroll-state()
CSS 함수는 position: sticky
로 인해 요소가 고정될 때 직접 CSS로 스타일을 적용할 수 있는 새로운 기능을 제공합니다. 이는 JavaScript 없이 스티키 또는 스크롤 종속 요소의 스타일을 동적으로 조정할 수 있는 선언적이고 가벼운 대안이 될 것입니다.