Skip to content

Slider 滑块

基于 reka-ui 的 Slider 原语构建的新粗野主义风格滑块,支持 v-model。

预览

Preview

基础用法

值:60

自定义范围 (min=0, max=200, step=10)

值:25

颜色变体 (variant=primary)

值:50

禁用状态

垂直方向

值:50

刻度标记

值:50

拖拽提示

值:50

安装

pnpm dlx brutx-vue@latest add slider

用法

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const value = ref([50])
</script>

<template>
    <Slider v-model="value" :max="100" :step="1" />
</template>

范围滑块

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const range = ref([25, 75])
</script>

<template>
    <Slider v-model="range" :max="100" :step="1" />
</template>

带最小/最大值

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const value = ref([500])
</script>

<template>
    <Slider v-model="value" :min="0" :max="1000" :step="50" />
</template>

禁用状态

vue
<template>
    <Slider v-model="value" disabled />
</template>

方向

通过 orientation 属性切换水平 (horizontal) 或垂直 (vertical) 布局,该属性透传给 reka-ui 原语。垂直模式需要为容器设定高度。

vue
<template>
    <div class="h-48">
        <Slider v-model="value" orientation="vertical" />
    </div>
</template>

刻度标记

通过 marks 属性传入数值数组,会在轨道对应位置渲染刻度小标记。

vue
<template>
    <Slider v-model="value" :marks="[0, 25, 50, 75, 100]" />
</template>

拖拽提示

开启 showTooltip 后,拖拽或悬停滑块时会在拇指附近显示当前值。

vue
<template>
    <Slider v-model="value" show-tooltip />
</template>

Props

属性类型默认值说明
modelValuenumber[]当前值,支持 v-model
minnumber0最小值
maxnumber100最大值
stepnumber1步长
disabledbooleanfalse是否禁用
ariaLabelstring无障碍标签
size'sm' | 'default' | 'lg''default'尺寸
variant'default' | 'primary' | 'secondary' | 'accent' | 'success''default'颜色变体
orientation'horizontal' | 'vertical''horizontal'布局方向
marksnumber[]刻度标记数值数组
showTooltipbooleanfalse是否显示拖拽提示
classstring自定义样式类

事件

事件参数说明
update:modelValuenumber[]值变化时触发

可访问性

  • 键盘操作:支持方向键调节值,Home / End 跳转最小/最大值
  • ARIA 属性:自动管理 aria-valueminaria-valuemaxaria-valuenowaria-orientation
  • 焦点管理:滑块可通过 Tab 键聚焦

方法(defineExpose)

通过 ref 访问组件实例后可调用以下方法:

属性/方法类型说明
currentValueComputedRef<number[]>当前滑块值(只读)
setValue(value: number[]) => void设置滑块值
vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const sliderRef = ref(null)
const value = ref([50])

function resetToCenter() {
    sliderRef.value?.setValue([50])
}
</script>

<template>
    <Slider ref="sliderRef" v-model="value" />
    <button @click="resetToCenter">Reset</button>
</template>

蛮力铸就。