Skyroc UI
输入

Slider

用于在连续区间内选择数值或数值范围的滑块组件

Slider 用于在连续范围中选择一个值或一段范围。组件基于 Radix Slider 封装,支持受控值、范围值、方向、尺寸、主题色和内部 slot 样式覆盖。

import {
  Slider,
  SliderRange,
  SliderRoot,
  SliderThumb,
  SliderTrack
} from '@skyroc/web-ui';

何时使用

  • 需要在连续范围中选择数值,例如音量、亮度、百分比或价格范围。
  • 用户更关注相对大小,而不是精确输入。
  • 需要范围选择时,可以通过两个值渲染双 thumb。
  • 需要精确输入或键盘录入时,优先使用 NumberInput。

基础用法

通过 defaultValue 设置非受控初始值。Slider 会根据 defaultValuevalue 数组渲染对应数量的 thumb。

Preview
Code
Loading...
<Slider
  defaultValue={[40]}
  max={100}
  step={1}
/>

受控模式

使用 valueonValueChange 控制当前值。value 始终是数组,即使只有一个 thumb。

Preview
Code
Loading...
const [value, setValue] = useState([35]);

<Slider
  value={value}
  onValueChange={setValue}
/>

范围选择

传入两个数值会渲染两个 thumb,用于选择范围。可以通过 minStepsBetweenThumbs 控制两个 thumb 的最小间距。

Preview
Code
Loading...
<Slider
  defaultValue={[25, 75]}
  max={100}
  minStepsBetweenThumbs={1}
  step={5}
/>

颜色

通过 color 设置轨道、已选范围和 thumb 的主题色。

Preview
Code
Loading...
颜色语义适用场景
primary主要操作默认滑块、主设置项
destructive危险状态风险阈值、危险范围
success成功状态正向范围、推荐值
warning警告状态临界值、需要注意的范围
info信息状态中性信息调节
carbon中性深色无语义调节
secondary次级状态辅助设置
accent强调状态需要视觉强调的调节项

方向

通过 orientation="vertical" 使用纵向滑块。纵向滑块需要外层容器提供明确高度。

Preview
Code
Loading...
<div className="h-40">
  <Slider
    defaultValue={[10, 60]}
    orientation="vertical"
  />
</div>

尺寸

通过 size 调整轨道厚度和 thumb 大小,从 xs2xl 共 6 个尺寸。

Preview
Code
Loading...
尺寸适用场景
xs紧凑筛选器、表格项
sm小型表单
md常规场景(默认)
lg设置页
xl强调调节项
2xl大尺寸展示或触控区

自定义样式

通过 classNames 覆盖内部 slot。常用 slot 包括 roottrackrangethumb

Preview
Code
Loading...
<Slider
  classNames={{
    track: 'bg-carbon/15',
    range: 'bg-carbon',
    thumb: 'border-carbon'
  }}
  defaultValue={[55]}
/>

API

Slider

主组件组合 Root、Track、Range 和 Thumb。defaultValue / value 的数组长度决定 thumb 数量。

属性说明类型默认值
defaultValue非受控模式下的默认值数组number[]-
value受控模式下的当前值数组number[]-
onValueChange拖动过程中值变化时触发(value: number[]) => void-
onValueCommit拖动结束提交值时触发(value: number[]) => void-
min最小值number0
max最大值number100
step步长number1
minStepsBetweenThumbs多个 thumb 之间的最小步数间距number-
orientation滑块方向'horizontal' | 'vertical''horizontal'
dir文本方向,透传给 Radix Slider Root'ltr' | 'rtl'-
inverted是否反转取值方向boolean-
disabled是否禁用滑块boolean-
color主题颜色,影响 range、track 和 thumb'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent''primary'
size尺寸,影响轨道厚度和 thumb 大小'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className根容器 classClassValue-
classNames各 slot 的自定义 classSliderClassNames-
trackProps传递给 SliderTrack 的额外 propsSliderTrackProps-
rangeProps传递给 SliderRange 的额外 propsSliderRangeProps-
thumbProps传递给每个 SliderThumb 的额外 propsSliderThumbProps-

结构组件

需要完全控制结构时,可以手动组合 Root、Track、Range 和 Thumb。

属性说明类型默认值
SliderRoot滑块根容器,基于 Radix Slider RootSliderRootProps-
SliderTrack轨道容器SliderTrackProps-
SliderRange已选范围SliderRangeProps-
SliderThumb可拖动手柄SliderThumbProps-

类型

SliderProps

Slider 主组件属性。继承 SliderRootProps,并增加主题色、slot class 和结构组件 props。

字段类型说明
defaultValuenumber[]默认值数组。
valuenumber[]受控值数组。
onValueChange(value: number[]) => void值变化回调。
onValueCommit(value: number[]) => void值提交回调。
minnumber最小值。
maxnumber最大值。
stepnumber步长。
minStepsBetweenThumbsnumber多个 thumb 的最小步数间距。
orientation'horizontal' | 'vertical'滑块方向。
dir'ltr' | 'rtl'文本方向。
invertedboolean是否反转取值方向。
disabledboolean是否禁用。
color'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'主题颜色。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
classNameClassValue根容器 class。
classNamesSliderClassNamesslot class 配置。
trackPropsSliderTrackProps轨道属性。
rangePropsSliderRangeProps范围属性。
thumbPropsSliderThumbProps手柄属性。

SliderClassNames

Slider 各 slot 的自定义 class。

字段类型说明
rootClassValue根容器 class。
trackClassValue轨道 class。
rangeClassValue已选范围 class。
thumbClassValue手柄 class。

SliderRootProps

根容器属性,基于 Radix Slider Root。

字段类型说明
defaultValuenumber[]默认值数组。
valuenumber[]受控值数组。
onValueChange(value: number[]) => void值变化回调。
onValueCommit(value: number[]) => void值提交回调。
orientation'horizontal' | 'vertical'滑块方向。
disabledboolean是否禁用。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'根容器尺寸。
classNameClassValue根容器 class。

SliderTrackProps

轨道属性,基于 Radix Slider Track,并增加主题色和尺寸。

字段类型说明
childrenReactNode通常放置 SliderRange。
color'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'主题颜色。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'轨道尺寸。
classNameClassValue轨道 class。

SliderRangeProps

已选范围属性,基于 Radix Slider Range,并增加主题色。

字段类型说明
color'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'主题颜色。
classNameClassValue范围 class。

SliderThumbProps

手柄属性,基于 Radix Slider Thumb,并增加主题色和尺寸。

字段类型说明
color'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'主题颜色。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'手柄尺寸。
classNameClassValue手柄 class。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page