Appearance
ZSlider
滑动输入条,对大部分浏览器
支持的同时也支持触屏设备
,允许用户自定义提示框
,标记
,拖拽句柄
。
基础用法
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data"></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
自定义提示
使用 tooltip
插槽或属性进行自定义。
tooltip = 0 完全隐藏提示
0
tooltip = 1 只在移动时显示提示
0
numerical = false 显示百分比
0%
使用tooltip插槽可自定义提示
0
<template>
<div class="sliderBox">
<h5>tooltip = 0 完全隐藏提示</h5>
<z-slider :tooltip="0" v-model:value="data"></z-slider>
<br/>
<br/>
<h5>tooltip = 1 只在移动时显示提示</h5>
<z-slider :tooltip="1" v-model:value="dataB"></z-slider>
<br/>
<br/>
<h5>numerical = false 显示百分比</h5>
<z-slider :numerical="false" v-model:value="dataC"></z-slider>
<br/>
<br/>
<br/>
<h5>使用tooltip插槽可自定义提示</h5>
<z-slider v-model:value="dataD">
<template #tooltip="{data}">
<div class="custom-tips">{{data}}</div>
</template>
</z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
const dataB = ref(8);
const dataC = ref(65);
const dataD = ref(50);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
.custom-tips {
background: linear-gradient(to left, rgba(108, 43, 205, 0.5) 50%, rgba(222, 28, 244, 0.75) 100%);
box-shadow: 0 3px 6px #99338b;
color: #ffffff;
font-weight: bold;
border-radius: 4px;
padding: 2px 6px;
}
h5 {
margin-bottom: 6px;
}
</style>
mark 标记
使用 marks
添加标记,支持使用 mark
插槽进行自定义。
默认标记
0
10
50
100
自定义
0
😃
50
100
自动划分,版本要求>=1.0.31
0
0
10
20
30
40
50
60
70
80
90
100
100
<template>
<div class="sliderBox">
<h5>默认标记</h5>
<z-slider v-model:value="data" :marks="mark"></z-slider>
<h5 class="mt">自定义</h5>
<z-slider v-model:value="dataB" :marks="mark">
<template #mark="{item}">
<div class="item" v-if="item.value === 10">
😃
</div>
</template>
</z-slider>
<h5 class="mt">自动划分,版本要求>=1.0.31</h5>
<z-slider v-model:value="dataC" :marks="10"></z-slider>
</div>
</template>
<script setup lang="ts">
import type { IZSliderMark } from "@d7ee/z-base-ui/dist/types/components/ZSlider";
import { ref } from "vue";
const mark: IZSliderMark[] = [
{
value: 10,
content: "10",
},
{
value: 50,
content: "50",
}
];
const data = ref(60);
const dataB = ref(60);
const dataC = ref(60);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
.mt {
margin-top: 60px;
}
.item {
color: red;
}
</style>
max和min
使用 max
、 min
设置最大值和最小值
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" :max="50" :min="-10"></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(-5);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
步长
使用 step
控制每次移动的步长
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" :min="0" :max="1" :step="0.1"></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0.2);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
禁用
添加属性 disabled
用于控制是否可选。
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" disabled></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
自定义主题色
使用 color
自定义主题色,注意:color只接受16进制的颜色。
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" color="#acaae5"></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(55);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
自定义句柄
使用 handle
插槽自定义拖拽句柄。
0
<template>
<div class="sliderBox">
<z-slider :tooltip="0" v-model:value="data">
<template #handle="{data}">
<div class="handles" :style="{color: data >= 50 ? 'green' : 'red'}">
<z-icon icon="ghost"></z-icon>
</div>
</template>
</z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(49);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
.handles {
font-size: 24px;
}
</style>
碰边检测
使用 border
开启边界检测,拖动滑动条至两边体验效果。
版本要求 >= 1.0.32
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" border></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(10);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 0;
width: 500px;
}
</style>
垂直模式
使用 vertical
开启垂直模式。
版本要求 >= 1.0.34
0
<template>
<div class="sliderBox">
<z-slider vh="300px" v-model:value="data" vertical></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 100px;
}
</style>
刻度线
使用 tickMarks
开启刻度线。
需要配合 marks
使用。 版本要求 >= 1.1.22
0
0
10
20
30
40
50
60
70
80
90
100
100
自定义:
0
0
10
20
30
40
50
60
70
80
90
100
100
<template>
<div class="sliderBox">
<z-slider v-model:value="data" :marks="10" tick-marks></z-slider>
<br/>
<br/>
<h3>自定义:</h3>
<br/>
<br/>
<z-slider v-model:value="data" :marks="10" tick-marks>
<template #tickMarks>
<div class="custom-marks"></div>
</template>
</z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
.custom-marks {
height: 100%;
width: 2px;
transform: translateX(-50%);
background: red;
}
</style>
高度
使用 height
修改slider高度。 版本要求 >= 1.0.3
0
<template>
<div class="sliderBox">
<z-slider v-model:value="data" height="10px"></z-slider>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const data = ref(0);
</script>
<style lang="less" scoped>
.sliderBox {
padding: 42px 0 0 42px;
width: 500px;
}
</style>
常见问题
- 在使用自定义
tooltip
时,当你发现tooltip
未居中存在偏差时,请给它设置一个css属性,transform: translateX(-100%);
兼容性
- Chrome: 从 24 版本开始
- Firefox: 从 16 版本开始
- Safari: 从 6 版本开始
- Edge: 从 12 版本开始
- Internet Explorer: 不支持
- Opera: 从 15 版本开始
API 属性
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
value | 用于获取或设置默认值,使用v-model:value绑定 | number | 0 |
max | 最大值 | number | 100 |
min | 最小值 | number | 0 |
step | 步长 | number | 1 |
disabled | 禁用 | boolean | — |
color | 主题色,只接受 十六进制 | string | — |
numerical | tooltip的内容显示数值还是百分比 | boolean | — |
tooltip | 控制tooltip的显示方式,0 隐藏 1 移动时显示 2 一直显示 | 0 | 1 | 2 | 2 |
marks | 标签,详见IZSliderMark,在1.0.31及其以上支持传入number | IZSliderMark[] | number | 2 |
height | slider高度,版本>= 1.0.3 | string | 4px |
bgColor | 柱体背景色,版本>= 1.0.3 | string | — |
lockColor | 使选中和未选中颜色都保持一至,需配合color 使用,版本>= 1.0.3 | boolean | — |
handleStyle | 设置句柄基本样式如高、宽 | Record<string, any> | |
border | tooltip边界检测,版本>= 1.0.32 | boolean | |
vertical | 垂直模式,版本 >= 1.0.34 | boolean | |
vw | 垂直模式下的slider宽度 | string | 4px |
vh | 垂直模式下的slider高度 | string | 100% |
tipBg | tooltip背景色,版本>= 1.1.21 | string | — |
tickMarks | 刻度线,版本>= 1.1.22 | boolean | false |
delay | 关闭动画,版本>= 1.2.0 | boolean | false |
版本特性说明
- 1.0.3
- 添加height、bgColor、lockColor
- 1.0.31
- marks支持
number
类型,传入10,则间隔10生成一个文本标记。 - 添加handleStyle
- marks支持
slot 插槽
通过插槽可接收二个参数,data为数值,percentage 为百分比类型均为number
slotName | 说明 | 参数 |
---|---|---|
tooltip | 自定义提示框 | {data: number, percentage: number} |
handle | 自定义句柄 | {data: number, percentage: number} |
mark | 自定义标记 | {item: IZSliderMark} |
event 事件
事件名称 | 说明 | 回调参数 | 版本 |
---|---|---|---|
change | 数值改变时回调 | function(number) | >= 1.0.0 |
afterChange | 结束滑动后触发 | function(number) | >= 1.0.31 |
类型声明
IZSliderMark
typescript
interface IZSliderMark {
// 数值
value: number;
// 内容
content: string
}
1
2
3
4
5
6
2
3
4
5
6