Slider

在连续/离散区间内选值的滑块,支持单值与 range、刻度、垂直方向与全键盘操作。

设计文档

如何引入

import { Slider } from '@chenzy-design/svelte';

基础用法

受控单值滑块,onChange 回调返回当前值。

当前值:40

区间选择

设置 range 启用双滑块,onChange 返回 [min, max] 数组。

区间:20 – 70

禁用与边界值

disabled 禁用交互,showBoundary 在轨道两端显示 min/max 标签。

禁用态
显示边界值
0 100

与输入框联动

Slider 与 InputNumber 双向同步,两者共享同一状态。

自定义提示

tipFormatter 自定义气泡文案,返回 null 可隐藏气泡;alwaysShowTip 常驻。

追加单位并常驻显示
隐藏气泡

刻度标签

marks 定义刻度,可用对象形式设置单个刻度样式;included=false 时刻度不随选区高亮。

带刻度的区间选择(step 10)
included=false 时刻度不随选区高亮

分段背景

railStyle 传入 linear-gradient,随选区动态更新形成分段着色。

分段:30 / 70

垂直方向

vertical 启用垂直布局,verticalReverse 翻转方向,height 控制高度。

vertical
reverse
range

手柄圆点

handleDot 为手柄叠加圆点,range 时可用数组分别配置两个手柄。

单值手柄圆点
区间两个手柄分别配置

自定义渲染

通过 mark / handle / tooltip 具名 snippet 自定义刻度、手柄与气泡内容。

自定义刻度、手柄与气泡渲染

API 参考

Slider

Props

属性说明类型默认值
value受控值;range 时为二元组number | [number, number]undefined
defaultValue非受控初始值number | [number, number]min / [min,min]
minnumber0
maxnumber100
stepnull 时仅停靠 marks 键number | null1
range双滑块区间模式booleanfalse
marks刻度标记;对象形式可带自定义 styleRecord<number, string | { label: string; style?: string }>undefined
dots在每个 step 处显示圆点(段内激活色)booleanfalse
included是否填充已选轨道段booleantrue
verticalbooleanfalse
verticalReverse垂直时反向(顶部为 min)booleanfalse
height垂直模式高度(px)number200
disabledbooleanfalse
clickable是否允许点击轨道跳转到最近合法值booleantrue
size'small'|'default'|'large'default
status校验态,影响已选轨道与手柄边框色'default'|'warning'|'error'default
tooltipVisible强制控制数值气泡显隐(受控)boolean | undefinedundefined
alwaysShowTip始终显示数值气泡booleanfalse
tipFormatter自定义气泡文案;返回 null 隐藏(value: number) => string | nullString
getAriaValueText自定义 aria-valuetext(如带单位)(value: number, index: number) => stringundefined
railStyle透传轨道内联样式stringundefined
trackStyle已选轨道段自定义样式(range 时为数组,各段对应一个样式对象)Record<string, string> | Record<string, string>[]undefined
handleStyle透传手柄内联样式stringundefined
pushablerange 模式下两手柄是否可相互推动(true=最小间距 0,number=最小间距值)boolean | numberfalse
allowCrossrange 模式下是否允许交叉(false 时强制 left <= right)booleantrue
id根节点 id,关联表单 labelstringundefined
ariaLabelstringundefined
ariaLabelledbygroup 与各手柄 aria-labelledby(指向外部 label id)stringundefined
onChange值变化(拖拽落定/键盘/点击)(v: number | [number, number]) => voidundefined
onChangeComplete拖拽结束或键盘落定时触发,适合请求节流(v: number | [number, number]) => voidundefined
onAfterChange拖拽/点击结束时触发(onChangeComplete 的别名)(v: number | [number, number]) => voidundefined
onInput与 change 同步的低级输入信号(拖动中实时触发)(v: number | [number, number]) => voidundefined
onFocus手柄获得焦点,附带手柄索引(detail: { index: number }) => voidundefined
onBlur手柄失焦,附带手柄索引(detail: { index: number }) => voidundefined
showBoundary显示轨道两端边界值标签booleanfalse
showArrowtooltip 是否显示箭头booleantrue
showMarkLabel显示标记文本标签booleantrue
tooltipOnMarktooltip 跟随标记位置booleanfalse
handleDot自定义手柄圆点样式,range 时为数组{ color: string; size: string } | { color: string; size: string }[]undefined
onMouseUppointerup 时触发(e: MouseEvent) => voidundefined
ariaValuetext覆盖 getAriaValueText 的 aria-valuetext 文案stringundefined

Slots

名称说明
mark自定义单个刻度标签渲染
handle自定义手柄内容(如带数字徽标)
tooltip自定义数值气泡内部内容

Accessibility

ARIA roleslider
键盘交互ArrowUp/RightArrowDown/LeftPageUpPageDownHomeEnd
  • 根容器 role=group,每个手柄 role=slider + tabindex=0
  • 手柄 aria-valuemin/valuemax/valuenow/aria-orientation
  • range 模式两手柄不交叉(越过自动交换)
  • 拖拽命令式:pointerdown 读一次 rail rect,document 监听 pointermove/up
  • disabled→aria-disabled,手柄 tabindex=-1
  • aria-valuetext 优先 getAriaValueText,其次 tipFormatter 输出(带单位可读文案)
  • 数值气泡:hover/focus/拖拽显示,alwaysShowTip 常驻,tooltipVisible 强制受控

设计变量

变量默认值用法
--cd-slider-handle-transition-duration var(--cd-motion-duration-fast)滑块手柄阴影过渡时长(组件消费)
--cd-slider-handle-transition-easing var(--cd-motion-ease-standard)滑块手柄阴影过渡曲线(组件消费)