Slider 滑块Slider · RangeSlider
在一个范围里大致选一个值(音量、亮度、缩放),或用 RangeSlider 选一段区间(价格、年龄)。需要精确数字时用 NumberInput,或者两者并排。
基本用法
默认 0–100、步长 1。拖动或键盘聚焦时在滑块上方显示数值气泡。
步长与刻度
档位不超过 12 个时可以用 ticks 显示刻度点,滑块用弹簧吸附到刻度;显示刻度时不显示数值气泡。format 决定数值怎么显示,同时用作读屏文字。
5 档,带刻度
步长 25
无极
step="any" 不吸附到任何刻度,值是连续的小数;显示时默认取整,用 digits 指定小数位。键盘一步是范围的百分之一。
保留两位小数
禁用
受控用法
onChange 在拖动过程中连续触发;onChangeEnd 在松手或每次按键之后触发一次,适合发请求。
实时值 40 · 松手后保存的值 40
区间滑块
RangeSlider 的值是 [下限, 上限]。按在轨道上会移动离得近的那个滑块;两个滑块不能交叉,minDistance 规定它们至少隔多远。
非受控
受控
¥200 – ¥600
规格
- 滑块
- 轨道 6 · 滑块 42 × 28 宽胶囊 · 1px 描边
- 按住
- 滑块 1.12× · 数值气泡 bouncy 弹出
- 落位
- 弹簧落位(分档 / 点击 / 键盘);连续型拖动时直接跟手
- 无极
- step="any" · 不吸附刻度,显示值取整
- 键盘
- ← → 步进 · PageUp / PageDown 走范围的十分之一 · Home / End
API
Slider
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | number | — | 当前值(受控)。 |
defaultValue | number | min | 初始值(非受控)。 |
onChange | (value: number) => void | — | 值变化时触发,拖动过程中连续触发。 |
onChangeEnd | (value: number) => void | — | 一次操作结束时触发:松手,或每次按键之后。 |
min | number | 0 | 最小值。 |
max | number | 100 | 最大值。 |
step | number | 'any' | 1 | 步长;'any' 为无极。 |
ticks | boolean | — | 显示刻度点,只在不超过 12 档时生效;此时不显示气泡。 |
bubble | boolean | true | 拖动或键盘聚焦时显示数值气泡。 |
format | (value: number) => string | — | 数值的显示方式,同时用作 aria-valuetext。 |
digits | number | — | 显示的小数位;无极滑块默认取整。 |
disabled | boolean | — | 禁用。 |
name | string | — | 表单字段名:多渲染一个隐藏 input。 |
RangeSlider
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | [number, number] | — | [下限, 上限](受控)。 |
defaultValue | [number, number] | [min, max] | 初始值(非受控)。 |
onChange / onChangeEnd | (value: [number, number]) => void | — | 同 Slider,参数是区间。 |
minDistance | number | 0 | 两个滑块之间至少隔多远;0 表示可以重合,不能交叉。 |
thumbLabels | [string, string] | ['最小值', '最大值'] | 两个滑块各自的可读名称。 |
name | string | — | 表单字段名:渲染两个同名的隐藏 input。 |
min / max / step / bubble / format / digits / disabled | — | — | 同 Slider。不支持 ticks。 |
无障碍
- Slider 的根节点是
role="slider",带aria-valuemin/aria-valuemax/aria-valuenow/aria-valuetext(取 format 的结果)。 - RangeSlider 的根节点是
role="group",里面两个滑块各自可聚焦,名称取 thumbLabels;它们的取值范围会随对方实时收窄。 - ← ↓ 减一步,→ ↑ 加一步;PageUp / PageDown 走一大步(范围的十分之一,不小于一步);Home / End 到两端。
- 必须有可读名称:放进带 label 的 Field(走
aria-labelledby),或给aria-label。 - 数值气泡是装饰(
aria-hidden)。需要一直看得到当前值时,请在旁边另外显示。 - 禁用时为
aria-disabled并离开 Tab 顺序。