Semi Design 滑动选择器(Slider)组件深度解析

Semi Design 滑动选择器(Slider)组件深度解析

【免费下载链接】semi-design 🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 2800+ Design Tokens, easy to build your design system. Make Semi Design to Any Design. 🧑🏻‍💻 Design to Code in one click 【免费下载链接】semi-design 项目地址: https://gitcode.com/gh_mirrors/se/semi-design

滑动选择器(Slider)是现代Web应用中常见的交互组件,它通过直观的拖拽方式让用户快速选择数值或数值范围。本文将全面解析Semi Design中的Slider组件,帮助开发者掌握其核心功能和高级用法。

组件概述

Slider组件相比传统的数字输入框(InputNumber)具有更直观的交互体验,特别适合以下场景:

  • 需要快速调整数值范围(如音量控制、亮度调节)
  • 数值精度要求不高但需要直观展示
  • 需要展示数值区间选择

基础用法

基本引入方式

import { Slider } from '@douyinfe/semi-ui';

三种基本形态

Slider组件提供三种基本形态:

  1. 单滑块模式:默认形态,用于选择单个值
  2. 双滑块模式:设置range属性为true,用于选择数值范围
  3. 禁用状态:设置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组件提供了完善的无障碍支持:

  1. ARIA属性

    • 使用role="slider"标识可交互元素
    • 通过aria-valuenowaria-valueminaria-valuemax标注当前值和范围
    • 垂直布局时设置aria-orientation="vertical"
  2. 键盘操作

    • 方向键调整数值
    • Page Up/Page Down实现大步长调整
    • Home/End快速跳转到最小/最大值
  3. 屏幕阅读器支持

    • 通过getAriaValueText提供友好数值描述
    • 支持aria-labelaria-labelledby标注

设计规范

Slider组件遵循以下设计规范:

  • 主色调使用品牌主色
  • 禁用状态降低透明度
  • 滑块大小符合操作热区要求
  • 提示信息清晰可见

通过本文的详细解析,开发者可以全面掌握Semi Design中Slider组件的使用方法和最佳实践,在实际项目中实现优雅的数值选择交互。

【免费下载链接】semi-design 🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 2800+ Design Tokens, easy to build your design system. Make Semi Design to Any Design. 🧑🏻‍💻 Design to Code in one click 【免费下载链接】semi-design 项目地址: https://gitcode.com/gh_mirrors/se/semi-design

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值