当前位置:首页 > VUE

用vue实现滑动输入条

2026-03-06 21:14:12VUE

使用 Vue 实现滑动输入条

基础实现(使用原生 input range)

Vue 可以结合 HTML 的原生 input[type="range"] 快速实现滑动输入条功能。以下是一个基础示例:

<template>
  <div>
    <input 
      type="range" 
      v-model="sliderValue" 
      :min="min" 
      :max="max" 
      @input="handleInput"
    />
    <p>当前值: {{ sliderValue }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sliderValue: 50,
      min: 0,
      max: 100
    }
  },
  methods: {
    handleInput() {
      console.log('值变化:', this.sliderValue);
    }
  }
}
</script>

自定义样式滑动条

如果需要自定义样式,可以隐藏原生输入条并用 CSS 重新设计:

<template>
  <div class="custom-slider">
    <input 
      type="range" 
      v-model="sliderValue" 
      :min="min" 
      :max="max" 
      class="slider"
    />
    <div class="slider-track">
      <div 
        class="slider-thumb" 
        :style="{ left: thumbPosition }"
      ></div>
    </div>
    <span>{{ sliderValue }}</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sliderValue: 30,
      min: 0,
      max: 100
    }
  },
  computed: {
    thumbPosition() {
      const range = this.max - this.min;
      const percent = (this.sliderValue - this.min) / range * 100;
      return `${percent}%`;
    }
  }
}
</script>

<style>
.custom-slider {
  position: relative;
  width: 300px;
}

.slider {
  position: absolute;
  width: 100%;
  opacity: 0;
  z-index: 2;
  height: 40px;
}

.slider-track {
  position: relative;
  width: 100%;
  height: 6px;
  background: #ddd;
  border-radius: 3px;
}

.slider-thumb {
  position: absolute;
  width: 20px;
  height: 20px;
  background: #42b983;
  border-radius: 50%;
  top: -7px;
  transform: translateX(-50%);
}
</style>

使用第三方库(如 vue-slider-component)

对于更复杂的需求,可以使用专门的 Vue 滑动组件库:

  1. 安装 vue-slider-component

    npm install vue-slider-component --save
  2. 基础使用示例:

    
    <template>
    <vue-slider 
     v-model="value" 
     :min="0" 
     :max="100" 
     :interval="10"
     tooltip="always"
    />
    </template>
import VueSlider from 'vue-slider-component' import 'vue-slider-component/theme/default.css'

export default { components: { VueSlider }, data() { return { value: 40 } } }

```

实现双向滑动条(范围选择)

需要选择范围值时,可以使用数组作为 v-model:

<template>
  <vue-slider 
    v-model="rangeValue" 
    :min="0" 
    :max="100" 
    :tooltip="true"
    :range="true"
  />
</template>

<script>
export default {
  data() {
    return {
      rangeValue: [20, 80]
    }
  }
}
</script>

垂直滑动条实现

通过设置 direction 属性可以创建垂直滑动条:

用vue实现滑动输入条

<template>
  <vue-slider 
    v-model="value" 
    :min="0" 
    :max="100" 
    direction="vertical"
    :height="300px"
  />
</template>

注意事项

  • 移动端兼容性需要测试 touch 事件
  • 自定义样式时注意处理浏览器兼容前缀
  • 性能敏感场景避免频繁触发 @input 事件,可使用防抖
  • 无障碍访问需要添加适当的 ARIA 属性

标签: vue
分享给朋友:

相关文章

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…