Skip to content

Slider 滑块

用于在连续区间内选择数值,适合音量、比例、进度等场景。

基础用法

当前值:30
vue
<template>
  <x-slider v-model="value" :min="0" :max="100" />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(30);
</script>

禁用状态

vue
<template>
  <x-slider v-model="value" disabled show-ticks :step="10" />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(50);
</script>

步长和刻度

当前值:20
vue
<template>
  <x-slider v-model="value" :step="10" show-ticks :marks="marks" />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(20);
const marks = {
  0: '0%',
  50: '50%',
  100: '100%',
};
</script>

范围选择

当前范围:20 - 80
vue
<template>
  <x-slider v-model="range" range :min="0" :max="100" />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const range = ref<[number, number]>([20, 80]);
</script>

显示输入框

vue
<template>
  <x-slider v-model="value" show-input />
  <x-slider v-model="range" range show-input />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(36);
const range = ref<[number, number]>([15, 65]);
</script>

垂直方向

vue
<template>
  <x-slider
    v-model="value"
    direction="vertical"
    :marks="{ 0: '0', 50: '50', 100: '100' }"
  />
  <x-slider v-model="range" direction="vertical" range show-input />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(45);
const range = ref<[number, number]>([20, 70]);
</script>

Tooltip

vue
<template>
  <x-slider v-model="value" :format-tooltip="formatTooltip" tooltip-position="top" />
  <x-slider v-model="value" :show-tooltip="false" />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(25);
const formatTooltip = (val?: string | number) => `${val}%`;
</script>

事件

等待操作
vue
<template>
  <x-slider
    v-model="value"
    @change="(val) => log = `change: ${JSON.stringify(val)}`"
    @change-end="(val) => log = `change-end: ${JSON.stringify(val)}`"
  />
  <p>{{ log }}</p>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(40);
const log = ref('等待操作');
</script>

按需导入

ts
import { Slider } from 'x-next';

Props

参数说明类型默认值
modelValue绑定值number | [number, number] | number[]undefined
defaultValue默认值,非受控模式number | [number, number]0
step步长number1
min最小值number0
max最大值number100
marks刻度标签Record<number, string>-
direction滑动方向'horizontal' | 'vertical''horizontal'
disabled是否禁用booleanfalse
showTicks是否显示刻度线booleanfalse
showInput是否显示输入框booleanfalse
range是否开启范围选择booleanfalse
formatTooltip格式化 tooltip 内容(value?: string | number) => string-
showTooltip是否显示 tooltipbooleantrue
tooltipPositiontooltip 展示位置'top' | 'tl' | 'tr' | 'bottom' | 'bl' | 'br' | 'left' | 'lt' | 'lb' | 'right' | 'rt' | 'rb'横向 'top',垂直 'right'

Events

事件名说明回调参数
update:modelValue值更新时触发value
change值变化时触发,拖动过程中会连续触发value
change-end点击、输入、键盘调整或拖拽结束后触发value