快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景…">
当前位置:首页 > 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 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router 通…

vue实现toggle

vue实现toggle

Vue 实现 Toggle 功能 在 Vue 中实现 toggle(切换)功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 和 v-on 通过 v-model 绑定数据,结合…