快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景…">
当前位置:首页 > VUE

vue滑动评分实现

2026-01-16 18:07:41VUE

Vue 滑动评分实现

使用原生 HTML5 range 输入

在 Vue 中可以通过 <input type="range"> 快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景。

<template>
  <div>
    <input 
      type="range" 
      min="0" 
      max="5" 
      step="0.5" 
      v-model="rating"
      @input="updateRating"
    >
    <p>当前评分: {{ rating }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0
    }
  },
  methods: {
    updateRating() {
      console.log('评分更新:', this.rating);
    }
  }
}
</script>

使用第三方库 vue-star-rating

对于更丰富的评分功能,可以使用专门为 Vue 设计的评分组件库。

vue滑动评分实现

安装 vue-star-rating:

npm install vue-star-rating

实现代码:

vue滑动评分实现

<template>
  <div>
    <star-rating 
      v-model:rating="rating"
      :increment="0.5"
      :max-rating="5"
      :star-size="30"
      @update:rating="updateRating"
    />
  </div>
</template>

<script>
import StarRating from 'vue-star-rating';

export default {
  components: {
    StarRating
  },
  data() {
    return {
      rating: 0
    }
  },
  methods: {
    updateRating(rating) {
      console.log('新评分:', rating);
    }
  }
}
</script>

自定义滑动评分组件

如果需要完全自定义样式和行为,可以创建自己的评分组件。

<template>
  <div class="custom-rating">
    <div 
      class="rating-bar"
      @mousemove="handleMouseMove"
      @click="setRating"
      ref="ratingBar"
    >
      <div class="rating-fill" :style="{ width: fillWidth }"></div>
    </div>
    <div class="rating-value">{{ displayRating }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0,
      maxRating: 5,
      isDragging: false
    }
  },
  computed: {
    fillWidth() {
      return `${(this.rating / this.maxRating) * 100}%`;
    },
    displayRating() {
      return this.rating.toFixed(1);
    }
  },
  methods: {
    handleMouseMove(e) {
      if (!this.isDragging) return;
      this.calculateRating(e);
    },
    setRating(e) {
      this.calculateRating(e);
    },
    calculateRating(e) {
      const bar = this.$refs.ratingBar;
      const rect = bar.getBoundingClientRect();
      const position = e.clientX - rect.left;
      const percentage = Math.min(Math.max(position / rect.width, 0), 1);
      this.rating = percentage * this.maxRating;
      this.$emit('update:rating', this.rating);
    }
  },
  mounted() {
    document.addEventListener('mousedown', () => {
      this.isDragging = true;
    });
    document.addEventListener('mouseup', () => {
      this.isDragging = false;
    });
  }
}
</script>

<style>
.custom-rating {
  width: 200px;
}
.rating-bar {
  height: 20px;
  background: #eee;
  position: relative;
  cursor: pointer;
}
.rating-fill {
  height: 100%;
  background: #ffcc00;
}
.rating-value {
  text-align: center;
  margin-top: 5px;
}
</style>

使用 Vuetify 的滑块组件

如果项目中使用 Vuetify,可以利用其内置的滑块组件实现评分功能。

<template>
  <v-slider
    v-model="rating"
    :max="5"
    :step="0.5"
    thumb-label
    ticks
  >
    <template v-slot:thumb-label="{ value }">
      {{ value.toFixed(1) }}
    </template>
  </v-slider>
</template>

<script>
export default {
  data() {
    return {
      rating: 0
    }
  }
}
</script>

每种方法适用于不同场景,原生HTML5方案最简单,第三方库提供更多功能,自定义组件灵活性最高,Vuetify方案适合使用该UI框架的项目。根据项目需求选择最合适的实现方式。

标签: 评分vue
分享给朋友:

相关文章

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序 在 Vue 中实现冒泡排序,可以通过数据绑定和响应式特性动态展示排序过程。以下是一个完整的实现示例,包含代码和详细说明。 数据准备 在 Vue 的 data 中定义一个数组作…

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…