Skip to content

HorizonDragScroll

마우스 드래그로 가로 스크롤할 수 있는 행위(Behavior) 컴포넌트입니다.

react-indiana-drag-scroll 오픈소스를 분석하여 함수형 컴포넌트로 재구현했습니다.

기본 사용법

tsx
import { HorizonDragScroll } from '@youngduck/yd-ui/HorizonDragScroll'

function App() {
  return (
    <HorizonDragScroll className="gap-4">
      {items.map(item => (
        <div key={item.id} className="shrink-0">
          {item.name}
        </div>
      ))}
    </HorizonDragScroll>
  )
}

TIP

자식 요소에 shrink-0을 주어야 가로 스크롤이 정상 작동합니다.

클릭 가능한 자식 요소

드래그와 클릭을 자동으로 구분합니다. 5px 이상 이동하면 드래그, 미만이면 클릭으로 판정됩니다.

tsx
<HorizonDragScroll className="gap-4">
  {items.map(item => (
    <div
      key={item.id}
      className="shrink-0"
      onClick={() => handleClick(item)}
    >
      {item.name}
    </div>
  ))}
</HorizonDragScroll>

레이아웃 커스터마이징

행위 컴포넌트이므로 className으로 레이아웃을 자유롭게 지정합니다.

tsx
{/* gap, width 등 자유롭게 지정 */}
<HorizonDragScroll className="w-full gap-4 items-center">
  ...
</HorizonDragScroll>

내장 CSS

아래 스타일은 컴포넌트에 내장되어 있으므로 별도 지정이 필요 없습니다.

속성설명
displayflexFlexbox 레이아웃
flex-directionrow가로 배치
user-selectnone드래그 시 텍스트 선택 방지
overflowauto넘침 시 스크롤
scrollbar숨김스크롤바 비노출

Props

PropTypeDefaultDescription
childrenReact.ReactNode필수스크롤할 자식 요소들
classNamestring-추가 CSS 클래스 (width, gap 등)

HorizonDragScroll은 표준 HTML div 요소의 모든 속성을 지원합니다.

주요 특징

  • 마우스 드래그로 가로 스크롤
  • 클릭과 드래그 자동 구분 (activationDistance 5px)
  • 스크롤바 자동 숨김
  • 이미지 위에서 드래그해도 네이티브 드래그 방지
  • 드래그 후 자식 요소 클릭 차단 (캡처 단계 stopPropagation)
  • 모바일 터치 스크롤 네이티브 지원 (overflow: auto)