Scroller
Scroller
네비게이션 컨트롤이 있는 가로 스크롤 컨테이너 컴포넌트예요. 콘텐츠가 컨테이너를 넘치면 네비게이션 컨트롤(치브론 버튼)을 표시해요.
출처: 문서
본문
사용법 (Usage)
Scroller은 콘텐츠가 컨테이너를 넘칠 때 네비게이션 컨트롤(치브론 버튼)을 표시하는 가로 스크롤 컨테이너예요. 트랙패드, shift + 마우스 휠, 또는 터치 제스처로 네이티브 스크롤을 지원해요.
import { Badge, Group, Scroller } from '@mantine/core';
function Demo() {
return (
<Scroller>
<Group gap="xs">
{Array.from({ length: 20 }).map((_, index) => (
<Badge key={index}>Badge {index + 1}</Badge>
))}
</Group>
</Scroller>
);
}
마우스 드래그 스크롤 (Mouse drag scrolling)
draggable prop을 설정하면 마우스로 클릭하고 드래그해서 스크롤할 수 있어요.
import { Badge, Group, Scroller } from '@mantine/core';
function Demo() {
return (
<Scroller draggable>
<Group gap="xs">
{Array.from({ length: 20 }).map((_, index) => (
<Badge key={index}>Badge {index + 1}</Badge>
))}
</Group>
</Scroller>
);
}
스크롤 양 (Scroll amount)
scrollAmount prop으로 네비게이션 버튼을 클릭할 때 컨테이너가 스크롤되는 픽셀 수를 제어할 수 있어요. 기본값은 200이에요.
import { Badge, Group, Scroller } from '@mantine/core';
function Demo() {
return (
<Scroller scrollAmount={400}>
<Group gap="xs">
{Array.from({ length: 30 }).map((_, index) => (
<Badge key={index}>Badge {index + 1}</Badge>
))}
</Group>
</Scroller>
);
}
컨트롤 크기 (Control size)
controlSize prop으로 네비게이션 버튼의 크기를 변경할 수 있어요. 유효한 Mantine 크기 값(xs, sm, md, lg, xl)이나 숫자(픽셀로 변환)를 받아요.
import { Badge, Group, Scroller } from '@mantine/core';
function Demo() {
return (
<Scroller controlSize="lg">
<Group gap="xs">
{Array.from({ length: 20 }).map((_, index) => (
<Badge key={index}>Badge {index + 1}</Badge>
))}
</Group>
</Scroller>
);
}
커스텀 아이콘 (Custom icons)
startControlIcon과 endControlIcon prop으로 기본 치브론 아이콘을 커스텀 아이콘으로 바꿀 수 있어요.
import { ArrowLeftIcon, ArrowRightIcon } from '@phosphor-icons/react';
import { Badge, Group, Scroller } from '@mantine/core';
function Demo() {
return (
<Scroller startControlIcon={<ArrowLeftIcon size={16} />} endControlIcon={<ArrowRightIcon size={16} />}>
<Group gap="xs">
{Array.from({ length: 20 }).map((_, index) => (
<Badge key={index}>Badge {index + 1}</Badge>
))}
</Group>
</Scroller>
);
}
Tabs와 함께 사용 (Usage with Tabs)
사용 가능한 공간에 맞지 않는 탭이 많을 때 탭 목록을 스크롤 가능하게 만들려면 Tabs.List 안에서 Scroller을 사용해요.
import { Scroller, Tabs } from '@mantine/core';
function Demo() {
return (
<Tabs defaultValue="first">
<Tabs.List>
<Scroller>
<Tabs.Tab value="first">First tab</Tabs.Tab>
<Tabs.Tab value="second">Second tab</Tabs.Tab>
<Tabs.Tab value="third">Third tab</Tabs.Tab>
<Tabs.Tab value="fourth">Fourth tab</Tabs.Tab>
<Tabs.Tab value="fifth">Fifth tab</Tabs.Tab>
<Tabs.Tab value="sixth">Sixth tab</Tabs.Tab>
<Tabs.Tab value="seventh">Seventh tab</Tabs.Tab>
<Tabs.Tab value="eighth">Eighth tab</Tabs.Tab>
<Tabs.Tab value="ninth">Ninth tab</Tabs.Tab>
<Tabs.Tab value="tenth">Tenth tab</Tabs.Tab>
</Scroller>
</Tabs.List>
</Tabs>
);
}