Semi Design 滑动选择器(Slider)组件深度解析
滑动选择器(Slider)是现代Web应用中常见的交互组件,它通过直观的拖拽方式让用户快速选择数值或数值范围。本文将全面解析Semi Design中的Slider组件,帮助开发者掌握其核心功能和高级用法。
组件概述
Slider组件相比传统的数字输入框(InputNumber)具有更直观的交互体验,特别适合以下场景:
- 需要快速调整数值范围(如音量控制、亮度调节)
- 数值精度要求不高但需要直观展示
- 需要展示数值区间选择
基础用法
基本引入方式
import { Slider } from '@douyinfe/semi-ui';
三种基本形态
Slider组件提供三种基本形态:
- 单滑块模式:默认形态,用于选择单个值
- 双滑块模式:设置
range属性为true,用于选择数值范围 - 禁用状态:设置
disabled属性为true
<div>
<div>默认单滑块</div>
<Slider showBoundary={true} />
<div>双滑块范围选择</div>
<Slider defaultValue={[20, 60]} range />
<div>禁用状态</div>
<Slider defaultValue={40} disabled />
</div>
高级功能
与输入框联动
Slider可以与InputNumber组件配合使用,实现滑块和输入框的同步控制:
class InputSlider extends React.Component {
constructor() {
super();
this.state = { value: 10 };
}
getSliderValue(value) {
if (isNaN(Number(value))) return;
this.setState({ value: value / 1 });
}
render() {
return (
<div>
<Slider
step={1}
value={this.state.value}
onChange={(value) => this.getSliderValue(value)}
/>
<InputNumber
onChange={(v) => this.getSliderValue(v)}
value={this.state.value}
min={0}
max={100}
/>
</div>
);
}
}
自定义提示内容
Slider支持通过tipFormatter自定义Tooltip显示内容,也可以通过getAriaValueText为屏幕阅读器提供友好提示:
<Slider
tipFormatter={v => `${v}%`}
getAriaValueText={v => `${v}%`}
/>
刻度标记
使用marks属性可以在滑块上添加刻度标记,适合需要展示特定数值点的场景:
<Slider
marks={{
0: '0°C',
20: '20°C',
40: '40°C'
}}
defaultValue={[0, 100]}
range
/>
分段背景色
通过railStyle结合CSS渐变可以实现动态分段背景效果:
class SegSlider extends React.Component {
constructor() {
super();
this.state = { value: [20, 60] };
}
getRailStyle(range) {
const color = ['var(--semi-color-danger)', 'transparent', 'var(--semi-color-success)'];
const gradientPos = this.state.value.map(val =>
((val - range[0]) / (range[1] - range[0])).toFixed(2) * 100
);
return {
background: `linear-gradient(to right,
${color[0]} ${gradientPos[0]}%,
${color[1]} ${gradientPos[0]}%,
${color[1]} ${gradientPos[1]}%,
${color[2]} ${gradientPos[1]}%)`
};
}
render() {
return (
<Slider
range
min={10}
max={100}
onChange={(value) => this.setState({ value })}
railStyle={this.getRailStyle([10, 100])}
defaultValue={this.state.value}
/>
);
}
}
垂直布局
Slider支持垂直方向布局,适合高度有限的场景:
<div style={{ height: 300 }}>
<Slider vertical />
<Slider vertical verticalReverse />
<Slider vertical range defaultValue={[20, 60]} />
</div>
无障碍支持
Slider组件提供了完善的无障碍支持:
-
ARIA属性:
- 使用
role="slider"标识可交互元素 - 通过
aria-valuenow、aria-valuemin、aria-valuemax标注当前值和范围 - 垂直布局时设置
aria-orientation="vertical"
- 使用
-
键盘操作:
- 方向键调整数值
- Page Up/Page Down实现大步长调整
- Home/End快速跳转到最小/最大值
-
屏幕阅读器支持:
- 通过
getAriaValueText提供友好数值描述 - 支持
aria-label和aria-labelledby标注
- 通过
设计规范
Slider组件遵循以下设计规范:
- 主色调使用品牌主色
- 禁用状态降低透明度
- 滑块大小符合操作热区要求
- 提示信息清晰可见
通过本文的详细解析,开发者可以全面掌握Semi Design中Slider组件的使用方法和最佳实践,在实际项目中实现优雅的数值选择交互。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



