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>

API 参考 ​

Slider — 属性
名称类型默认值说明
modelValue
number[] | undefined
undefined
当前滑块值数组;单值数组渲染一个滑块,双值数组用于范围滑块,可用 v-model 受控。
详情

声明类型

number[] | undefined

默认值详情

解析值
undefined

来源

Slider.vue:26

packages/ui/src/components/slider/Slider.vue

min
number | undefined
0
可选的最小值,也是空值数组的回退值。
详情

声明类型

number | undefined

默认值详情

解析值
0

来源

Slider.vue:27

packages/ui/src/components/slider/Slider.vue

max
number | undefined
100
可选的最大值。
详情

声明类型

number | undefined

默认值详情

解析值
100

来源

Slider.vue:28

packages/ui/src/components/slider/Slider.vue

step
number | undefined
1
键盘或指针调整数值时使用的步长。
详情

声明类型

number | undefined

默认值详情

解析值
1

来源

Slider.vue:29

packages/ui/src/components/slider/Slider.vue

disabled
boolean | undefined
false
禁用所有滑块拇指的交互。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Slider.vue:30

packages/ui/src/components/slider/Slider.vue

ariaLabel
string | undefined
undefined
传递给滑块原语的无障碍名称。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Slider.vue:31

packages/ui/src/components/slider/Slider.vue

ariaLabelledby
string | undefined
undefined
命名焦点滑块的外部元素 ID。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Slider.vue:32

packages/ui/src/components/slider/Slider.vue

ariaDescribedby
string | undefined
undefined
焦点滑块的说明 ID,与内置提示说明合并。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Slider.vue:33

packages/ui/src/components/slider/Slider.vue

getValueText
((value: number, index: number) => string) | undefined
undefined
为各滑块生成 aria-valuetext 可读值的回调函数。
详情

声明类型

((value: number, index: number) => string) | undefined

默认值详情

解析值
undefined

来源

Slider.vue:34

packages/ui/src/components/slider/Slider.vue

size
"default" | "lg" | "sm" | undefined
"default"
设置滑轨和拇指的尺寸预设。
详情

声明类型

NonNullable<"default" | "lg" | "sm" | null | undefined> | undefined

字面量

  • "default"
  • "lg"
  • "sm"

默认值详情

解析值
"default"

来源

Slider.vue:35

packages/ui/src/components/slider/Slider.vue

variant
"accent" | "default" | "primary" | "secondary" | "success" | undefined
"default"
设置滑块填充及拇指的颜色变体。
详情

声明类型

NonNullable<"default" | "primary" | "secondary" | "success" | "accent" | null | undefined> | undefined

字面量

  • "accent"
  • "default"
  • "primary"
  • "secondary"
  • "success"

默认值详情

解析值
"default"

来源

Slider.vue:36

packages/ui/src/components/slider/Slider.vue

orientation
"horizontal" | "vertical" | undefined
"horizontal"
选择水平或垂直布局,并相应布置刻度与提示。
详情

声明类型

NonNullable<"vertical" | "horizontal" | null | undefined> | undefined

字面量

  • "horizontal"
  • "vertical"

默认值详情

解析值
"horizontal"

来源

Slider.vue:37

packages/ui/src/components/slider/Slider.vue

marks
number[] | undefined
undefined
在滑轨指定数值位置绘制的刻度标记数组。
详情

声明类型

number[] | undefined

默认值详情

解析值
undefined

来源

Slider.vue:38

packages/ui/src/components/slider/Slider.vue

showTooltip
boolean | undefined
false
在当前聚焦或悬停的滑块拇指旁显示其数值提示。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Slider.vue:39

packages/ui/src/components/slider/Slider.vue

class
string | undefined
undefined
追加到滑块根容器的 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Slider.vue:40

packages/ui/src/components/slider/Slider.vue

Slider — 事件
名称签名或类型说明
@update:modelValue
[value: number[]]
用户调整滑块时发出新的数值数组;通过父组件更新 modelValue 完成受控绑定。
详情

声明类型

[value: number[]]

来源

Slider.vue

packages/ui/src/components/slider/Slider.vue

Slider — 暴露成员
名称签名或类型说明
currentValue
number[]
当前有效滑块数值数组的计算属性;只读,未传值或空数组时包含 min。
详情

声明类型

number[]

来源

Slider.vue:71

packages/ui/src/components/slider/Slider.vue

setValue
(value: number[]) => void
以 update:modelValue 事件请求父组件设置新的滑块数值数组。
详情

声明类型

(value: number[]) => void

来源

Slider.vue:72

packages/ui/src/components/slider/Slider.vue

可访问性 ​

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

方法(defineExpose) ​

通过 ref 访问组件实例后可调用 setValue,请求父组件更新滑块值:

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>

蛮力铸就。