UI Design System
build dev

Slider

在连续或分段范围内选值。中文惯用名:滑动条。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.slider
名称Slider
二级分类数据录入(data-entry)
用途在连续或分段范围内选值
描述中文惯用名:滑动条。

预览

静态结构:Slider 为 Base UI 单值滑杆(data-slot="slider"):SliderControl(data-slot="slider-control")内 Track(data-slot="slider-track")+ Indicator(data-slot="slider-indicator",已选区间填充)+ 单个 Thumb(data-slot="slider-thumb",可拖拽、支持键盘方向键微调)。min / max / step 决定轨道范围与步进;value 非 number 时回退为 min。Form 内声明非空 name 时经 FieldShell 包裹(label + 校验错误行)。

DSL 结构

DslNode
{
  "type": "Slider",
  "props": {
    "name": "threshold",
    "label": "告警阈值",
    "value": 40,
    "min": 0,
    "max": 100,
    "step": 5
  }
}

何时用

何时使用

  • 在一个连续区间内取值的调参场景:阈值、音量、透明度、缩放比例。
  • 用户更关注「大致比例」而非精确数值,拖动即可看到结果变化。
  • 需要限制取值范围的数值(min / max / step 共同约束)。

何时不用

  • 需要精确录入具体数值(金额、数量、编号):使用 NumberInput;Slider 依赖指针精度,微调困难。
  • 区间选择(开始 - 结束两个端点):当前实现为单值滑杆,区间用两个 NumberInput 字段或等待区间组件。
  • 离散枚举选择:使用 RadioGroup / Select。

变体

变体视觉形态适用场景
默认(0-100)轨道 + 已选填充 + 可拖拽滑块无特殊范围的百分比类调参
min / max 自定义范围轨道按范围映射,拇指位置随之变化非 0-100 的取值区间(如温度、额度)
step 离散步进拖动吸附到 step 的整数倍只允许特定档位取值(如 5 的倍数)
Form 表单项FieldShell:label + 滑杆 + 校验错误行表单内数值字段(声明 name 自动注册)
disabled 禁用滑杆半透明不可拖动只读回显、联动未就绪

API 属性

属性类型默认值说明
namestring—字段名;在 Form 内声明即自动成为表单项
labelstring—表单项标签(FieldShell 呈现)
rulesFieldRule[]—校验规则
valuenumber—受控值(独立渲染时生效,非 number 时回退为 min);Form 内作为字段初始值(优先于 Form initialValues)
minnumber0最小值
maxnumber100最大值
stepnumber1步长(拖动吸附与键盘微调的步距)
disabledbooleanfalse禁用拖动
onChange(value: number) => void—拖动变化事件,传出 number(Renderer 绑定 events.onChange;DSL 语义值,拖动过程高频触发)
className / stylestring / CSSProperties—通用:根节点 class 合并 / 内联样式(Form 内为 form-item 容器,独立渲染时为滑杆本身)

使用规范

  • 拖动过程 onChange 高频触发:联动重活(接口保存、大计算)必须自行节流或改为拖拽结束后提交。
  • 必须同时给出当前值的可读回显(如旁侧文本或数字输入),滑杆本身无法表达精确数值。
  • min / max / step 与业务约束一致;step 过大时用户无法到达期望值,过小则难以精确停止。
  • 精确录入需求交给 NumberInput,Slider 适合「大致比例」;两者可组合(滑杆 + 数字框双向联动)。
  • Form 内声明非空 name 才注册字段;未声明 name 时为独立受控滑杆。

正例

  • ✓ 告警阈值:min={0} max={100} step={5},旁侧文本实时显示「当前值:40」,确认后再保存。
  • ✓ 画布缩放:Slider 与 NumberInput 双向联动,拖动看效果、输入定精确值。
  • ✓ Form 内「评分权重」:name + label,rules 限制必填,值以 number 提交。

反例

  • ✕ 用 Slider 录入金额、数量等必须精确的字段(应使用 NumberInput)。
  • ✕ 在 onChange 中直接发起保存请求,拖动一次打出数十个请求。
  • ✕ 不给当前值回显,用户无法知道拖到了具体哪个数值。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。