Slider 滑动输入条

滑动型输入器,展示当前值和可选范围。

何时使用

当用户需要在数值区间/自定义区间内进行选择时,可为连续或离散值。

代码演示

基本

基本滑动条。当 rangetrue 时,渲染为双滑块。当 disabledtrue 时,滑块处于不可用状态。

  1. <template>
  2. <div>
  3. <v-slider v-model="sliderValue" :disabled="disabled"></v-slider>
  4. <v-slider range v-model="sliderRange" :disabled="disabled"></v-slider>
  5. <div>
  6. Disabled: <v-switch v-model="disabled"></v-switch>
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. disabled: false,
  15. sliderValue: 30,
  16. sliderRange: [20, 50],
  17. };
  18. },
  19. };
  20. </script>

带 icon 的滑块

滑块左右可以设置图标来表达业务含义。

  1. <template>
  2. <div class="icon-wrapper">
  3. <v-icon type="frown-o" :class="customIconValue <= 50 ? 'anticon-highlight' : ''"></v-icon>
  4. <v-slider v-model="customIconValue"></v-slider>
  5. <v-icon type="smile-o" :class="customIconValue > 50 ? 'anticon-highlight' : ''"></v-icon>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. customIconValue: 30,
  13. };
  14. },
  15. };
  16. </script>
  17. <style>
  18. .icon-wrapper {
  19. position: relative;
  20. padding: 0px 30px;
  21. }
  22. .icon-wrapper .anticon {
  23. position: absolute;
  24. top: -3px;
  25. width: 16px;
  26. height: 16px;
  27. line-height: 1;
  28. font-size: 16px;
  29. color: rgba(0, 0, 0, 0.3);
  30. }
  31. .icon-wrapper .anticon:first-child {
  32. left: 0;
  33. }
  34. .icon-wrapper .anticon:last-child {
  35. right: 0;
  36. }
  37. .anticon.anticon-highlight {
  38. color: rgba(0, 0, 0, 0.6);
  39. }
  40. </style>

事件

当 Slider 的值发生改变时,会触发 change 事件,并把改变后的值作为参数传入。在 onmouseup 时,会触发 afterChange 事件,并把当前值作为参数传入。

  1. <template>
  2. <div>
  3. <v-slider v-model="sliderValue" @before-change="beforeChange" @change="onChange" @after-change="afterChange"></v-slider>
  4. <v-slider range v-model="sliderRange" @before-change="beforeChange" @change="onChange" @after-change="afterChange"></v-slider>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. sliderValue: 30,
  12. sliderRange: [20, 50],
  13. };
  14. },
  15. methods: {
  16. beforeChange(value) {
  17. console.log(`before slider change: ${value}`);
  18. },
  19. onChange(value) {
  20. console.log(`slider changed: ${value}`);
  21. },
  22. afterChange(value) {
  23. console.log(`after slider change: ${value}`);
  24. },
  25. },
  26. };
  27. </script>

和输入框组件保持同步

数字输入框 组件保持同步。

  1. <template>
  2. <v-row>
  3. <v-col :span="20">
  4. <v-slider :min="1" :max="20" v-model="synValue"></v-slider>
  5. </v-col>
  6. <v-col :span="4">
  7. <v-input-number :min="1" :max="20" v-model="synValue"></v-input-number>
  8. </v-col>
  9. </v-row>
  10. <v-row>
  11. <v-col :span="20">
  12. <v-slider :min="0" :max="1" :step="0.01" v-model="synFloatValue"></v-slider>
  13. </v-col>
  14. <v-col :span="4">
  15. <v-input-number :min="0" :max="1" :step="0.01" v-model="synFloatValue"></v-input-number>
  16. </v-col>
  17. </v-row>
  18. </template>
  19. <script>
  20. export default {
  21. data() {
  22. return {
  23. synValue: 2,
  24. synFloatValue: 0.2,
  25. };
  26. },
  27. };
  28. </script>

自定义提示

使用 tipFormatter 可以格式化 Tooltip 的内容,设置 tipFormatter={null},则隐藏 Tooltip

  1. <template>
  2. <div>
  3. <v-slider :value="30" :tip-formatter="tipFormatter"></v-slider>
  4. <v-slider :value="30" :tip-formatter="null"></v-slider>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {};
  11. },
  12. methods: {
  13. tipFormatter(value) {
  14. return `${value}%`;
  15. },
  16. },
  17. };
  18. </script>

带标签的滑块

使用 marks 属性标注分段式滑块,使用 value 指定滑块位置。当 included=false 时,表明不同标记间为并列关系。当 step=null 时,Slider 的可选值仅有 marks 标出来的部分。

  1. <template>
  2. <div>
  3. <h4>included = true</h4>
  4. <v-slider :value="37" :marks="marks"></v-slider>
  5. <v-slider :value="[26, 37]" range :marks="marks"></v-slider>
  6. <h4>included = false</h4>
  7. <v-slider :value="37" :marks="marks" :included="false"></v-slider>
  8. <h4>marks & step</h4>
  9. <v-slider :value="37" :marks="marks" :step="10" dots></v-slider>
  10. <h4>step = null</h4>
  11. <v-slider :value="37" :marks="marks" :step="null"></v-slider>
  12. </div>
  13. </template>

API

Slider Props

参数说明类型默认值
range双滑块模式booleanfalse
min最小值number0
max最大值number100
step步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。number|null1
marks刻度标记,key 的类型必须为 number 且取值在闭区间 [min, max] 内object{ number: string }
dots显示 step 间断点,建议在 step 间隔不密集时使用booleanfalse
value设置当前取值。当 rangefalse 时,使用 number,否则用 [number, number]number|number[]
includedmarks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列booleantrue
disabled值为 true 时,滑块为禁用状态booleanfalse
tip-formatterSlider 会把当前值传给 tip-formatter,并在 Tooltip 中显示 tip-formatter 的返回值,若为 null,则隐藏 Tooltip。Function|nullIDENTITY

Slider Events

参数说明回调参数
before-change当 Slider 的值发生改变前触发的事件value
change当 Slider 的值发生改变时触发的事件value
after-changeonmouseup 触发时机一致value