当前位置:首页 > VUE

vue实现星级评分

2026-01-18 12:34:49VUE

实现星级评分的基本思路

在Vue中实现星级评分通常需要创建一个可交互的组件,允许用户点击或悬停选择评分。核心逻辑包括渲染星星图标、处理用户交互以及动态更新评分状态。

使用Font Awesome图标库

安装Font Awesome库可以方便地使用星星图标:

vue实现星级评分

npm install @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/vue-fontawesome

基础组件代码示例

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="rate(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
    >
      <font-awesome-icon 
        :icon="['fas', star <= (hoverRating || currentRating) ? 'star' : 'star-o']"
        :class="{ 'active': star <= (hoverRating || currentRating) }"
      />
    </span>
    <p v-if="showRating">当前评分: {{ currentRating }} / {{ maxStars }}</p>
  </div>
</template>

<script>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faStar, faStarO } from '@fortawesome/free-solid-svg-icons'

export default {
  components: {
    FontAwesomeIcon
  },
  data() {
    return {
      currentRating: 0,
      hoverRating: 0,
      maxStars: 5
    }
  },
  methods: {
    rate(star) {
      this.currentRating = star
    }
  }
}
</script>

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

实现半星评分功能

如需实现半星评分,需要修改图标渲染逻辑:

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="rate(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
    >
      <font-awesome-icon 
        v-if="star <= Math.floor(currentRating)"
        :icon="['fas', 'star']"
        class="active"
      />
      <font-awesome-icon 
        v-else-if="star - 0.5 <= currentRating"
        :icon="['fas', 'star-half-alt']"
        class="active"
      />
      <font-awesome-icon 
        v-else
        :icon="['fas', 'star']"
      />
    </span>
  </div>
</template>

使用SVG实现自定义星星

如需完全自定义星星样式,可以使用SVG:

vue实现星级评分

<template>
  <div class="star-rating">
    <svg 
      v-for="star in maxStars" 
      :key="star"
      @click="rate(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
      width="24" 
      height="24" 
      viewBox="0 0 24 24"
    >
      <path 
        :d="star <= (hoverRating || currentRating) ? filledStarPath : emptyStarPath"
        :fill="star <= (hoverRating || currentRating) ? 'gold' : 'gray'"
      />
    </svg>
  </div>
</template>

<script>
export default {
  data() {
    return {
      filledStarPath: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z",
      emptyStarPath: "M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"
    }
  }
}
</script>

组件属性扩展

为增加组件复用性,可以添加props:

props: {
  rating: {
    type: Number,
    default: 0
  },
  maxStars: {
    type: Number,
    default: 5
  },
  editable: {
    type: Boolean,
    default: true
  }
}

事件触发

通过$emit将评分变化通知父组件:

methods: {
  rate(star) {
    if (!this.editable) return
    this.currentRating = star
    this.$emit('rating-changed', star)
  }
}

标签: 星级评分
分享给朋友:

相关文章

vue实现批量select评分

vue实现批量select评分

Vue 实现批量 Select 评分 在 Vue 中实现批量 Select 评分功能,可以通过动态生成评分选项并结合 v-model 实现数据绑定。以下是一个完整的实现示例: 基础实现 创建可复用的…

vue实现星星评分原理

vue实现星星评分原理

实现星星评分的基本原理 星星评分通常通过显示一组星星图标,允许用户点击或悬停来选择评分值。Vue 的响应式特性使得实现这一功能变得简单,核心逻辑包括数据绑定、事件处理和动态样式控制。 数据绑定与渲染…

react实现星星评分

react实现星星评分

实现星星评分组件 使用React实现一个可交互的星星评分组件,可以通过状态管理用户选择的评分值。 import React, { useState } from 'react'; const St…

js 实现评分

js 实现评分

实现评分功能(五星评分) 在JavaScript中实现五星评分功能,可以通过HTML、CSS和JavaScript结合完成。以下是一个常见的实现方式: HTML部分 <div class="…

vue实现简单星星评分

vue实现简单星星评分

实现星星评分组件 在Vue中实现星星评分功能,可以通过组件化的方式完成。以下是一个简单的实现方案: <template> <div class="star-rating">…