当前位置:首页 > VUE

vue 实现评分

2026-03-07 09:33:25VUE

实现评分功能的几种方法

使用第三方库(如vue-star-rating)

安装vue-star-rating库:

npm install vue-star-rating

在组件中使用:

<template>
  <star-rating 
    v-model="rating"
    :increment="0.5"
    :star-size="30"
  />
</template>

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

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

自定义评分组件

创建一个可复用的评分组件:

vue 实现评分

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="setRating(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
    >
      {{ star <= (hoverRating || rating) ? '★' : '☆' }}
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    initialRating: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      rating: this.initialRating,
      hoverRating: 0
    }
  },
  methods: {
    setRating(star) {
      this.rating = star
      this.$emit('rating-selected', star)
    }
  }
}
</script>

<style>
.star-rating span {
  font-size: 24px;
  color: gold;
  cursor: pointer;
}
</style>

使用Element UI的Rate组件

安装Element UI:

npm install element-ui

在main.js中引入:

vue 实现评分

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

在组件中使用:

<template>
  <el-rate
    v-model="rating"
    :colors="['#99A9BF', '#F7BA2A', '#FF9900']"
    :max="10"
    show-text
  />
</template>

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

实现半星评分功能

修改自定义组件支持半星:

<template>
  <div class="star-rating">
    <span 
      v-for="star in stars" 
      :key="star.index"
      @click="setRating(star.value)"
      @mouseover="hoverRating = star.value"
      @mouseleave="hoverRating = 0"
    >
      <span v-if="star.isHalf">½</span>
      <span v-else>{{ star.isFilled ? '★' : '☆' }}</span>
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    increment: {
      type: Number,
      default: 0.5
    }
  },
  computed: {
    stars() {
      const stars = []
      for (let i = 1; i <= this.maxStars; i += this.increment) {
        stars.push({
          index: i,
          value: i,
          isHalf: i % 1 !== 0,
          isFilled: i <= this.currentRating
        })
      }
      return stars
    },
    currentRating() {
      return this.hoverRating || this.rating
    }
  },
  data() {
    return {
      rating: 0,
      hoverRating: 0
    }
  },
  methods: {
    setRating(rating) {
      this.rating = rating
      this.$emit('input', rating)
    }
  }
}
</script>

带文字描述的评分

在评分旁添加文字描述:

<template>
  <div>
    <star-rating v-model="rating" />
    <div class="rating-text">
      {{ ratingText }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0,
      texts: ['很差', '差', '一般', '好', '很好']
    }
  },
  computed: {
    ratingText() {
      return this.texts[Math.ceil(this.rating) - 1] || ''
    }
  }
}
</script>

以上方法提供了从简单到复杂的多种实现方案,可根据项目需求选择合适的实现方式。第三方库方案适合快速开发,自定义组件方案则提供更大的灵活性。

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

相关文章

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现刷新

vue实现刷新

Vue 实现页面刷新的方法 在Vue中实现页面刷新可以通过多种方式,以下是几种常见的方法: 使用 window.location.reload() 通过调用浏览器的原生方法强制刷新当前页面: me…

vue实现fragment

vue实现fragment

Vue 实现 Fragment 的方法 在 Vue 中,Fragment 允许组件返回多个根节点而不需要包裹一个额外的 DOM 元素。以下是几种实现方式: 使用 Vue 3 的 <templa…

vue实现popover

vue实现popover

Vue 实现 Popover 的方法 使用第三方库(如 Element UI、Ant Design Vue) 许多成熟的 UI 库已经内置了 Popover 组件,可以直接调用。 Element U…

vue歌词滚动实现

vue歌词滚动实现

实现 Vue 歌词滚动的核心方法 监听当前播放时间 通过 audio 元素的 timeupdate 事件获取当前播放时间,并与歌词时间戳对比。在 Vue 中使用 @timeupdate 绑定事件:…

vue实现版本树

vue实现版本树

Vue 实现版本树 版本树通常用于展示项目或文档的版本历史,类似于 Git 的提交历史。以下是基于 Vue 的实现方法: 数据结构设计 版本树的数据通常是一个树形结构,每个节点包含版本信息(如版本号…