当前位置:首页 > VUE

vue实现评分案例

2026-01-19 04:38:23VUE

实现评分组件的基本结构

在Vue中创建一个评分组件,可以使用v-for循环生成星星图标,并通过v-model或自定义事件实现双向绑定。以下是一个基于Font Awesome图标的实现示例:

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star" 
      @click="setRating(star)"
      @mouseover="hoverRating(star)"
      @mouseleave="resetRating"
    >
      <i :class="['fa', star <= currentRating ? 'fa-star' : 'fa-star-o']"></i>
    </span>
    <p v-if="showScore">{{ currentRating }} / {{ maxStars }}</p>
  </div>
</template>

组件逻辑与数据绑定

组件需要定义评分相关数据和方法,通过props接收外部传入的配置参数:

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    initialRating: {
      type: Number,
      default: 0
    },
    showScore: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      currentRating: this.initialRating,
      tempRating: 0
    }
  },
  methods: {
    setRating(star) {
      this.currentRating = star;
      this.$emit('rating-changed', star);
    },
    hoverRating(star) {
      this.tempRating = this.currentRating;
      this.currentRating = star;
    },
    resetRating() {
      this.currentRating = this.tempRating;
    }
  }
}
</script>

样式优化与交互效果

添加CSS样式增强视觉效果,可以使用过渡动画和颜色变化提升用户体验:

<style scoped>
.star-rating {
  font-size: 24px;
  color: #ffc107;
}
.star-rating span {
  cursor: pointer;
  transition: all 0.2s;
}
.star-rating span:hover {
  transform: scale(1.2);
}
.star-rating p {
  font-size: 16px;
  color: #666;
  margin-top: 5px;
}
</style>

使用自定义SVG图标

如果需要使用自定义SVG代替字体图标,可以修改模板部分:

<template>
  <div class="star-rating">
    <svg 
      v-for="star in maxStars" 
      :key="star" 
      @click="setRating(star)"
      width="24" 
      height="24"
      viewBox="0 0 24 24"
    >
      <path 
        :fill="star <= currentRating ? '#ffc107' : '#e0e0e0'" 
        d="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"
      />
    </svg>
  </div>
</template>

支持半星评分

实现半星评分功能需要修改评分逻辑和图标显示方式:

methods: {
  setRating(star, event) {
    const rect = event.target.getBoundingClientRect();
    const isHalf = event.clientX - rect.left < rect.width / 2;
    this.currentRating = star - (isHalf ? 0.5 : 0);
    this.$emit('rating-changed', this.currentRating);
  }
}

模板部分对应调整为显示半星图标:

<span v-for="star in maxStars" :key="star" @click="setRating(star, $event)">
  <i v-if="star <= currentRating" class="fa fa-star"></i>
  <i v-else-if="star - 0.5 <= currentRating" class="fa fa-star-half-o"></i>
  <i v-else class="fa fa-star-o"></i>
</span>

组件使用示例

在父组件中使用评分组件并处理评分变化事件:

vue实现评分案例

<template>
  <div>
    <star-rating 
      :max-stars="5" 
      :initial-rating="3" 
      @rating-changed="handleRatingChange"
    />
    <p>当前评分: {{ userRating }}</p>
  </div>
</template>

<script>
import StarRating from './StarRating.vue';

export default {
  components: { StarRating },
  data() {
    return {
      userRating: 3
    }
  },
  methods: {
    handleRatingChange(rating) {
      this.userRating = rating;
    }
  }
}
</script>

标签: 评分案例
分享给朋友:

相关文章

vue 实现评分

vue 实现评分

实现评分功能的方法 在Vue中实现评分功能可以通过多种方式完成,以下是几种常见的实现方法: 使用第三方库 使用现成的评分组件库可以快速实现评分功能,例如vue-star-rating或rate-it…

vue实现星星评分

vue实现星星评分

Vue 实现星星评分 在 Vue 中实现星星评分功能,可以通过自定义组件或使用第三方库来完成。以下是两种常见实现方式: 自定义星星评分组件 创建一个可复用的星星评分组件,支持点击和悬停交互: &l…

vue实现点击星星评分

vue实现点击星星评分

Vue 实现点击星星评分 使用 Vue 实现点击星星评分功能可以通过动态绑定类名和事件处理来实现。以下是一个简单的实现方法: 模板部分 <template> <div cla…

vue实现点赞案例

vue实现点赞案例

Vue实现点赞功能 基础实现(无持久化) 创建Vue组件,使用v-on绑定点击事件和v-bind动态绑定样式: <template> <button @click=…

react 实现长列表案例

react 实现长列表案例

实现长列表的常用方法 虚拟滚动技术(Virtual Scrolling) 虚拟滚动通过仅渲染当前可视区域内的列表项来提升性能,适合超长列表场景。React生态中常用库如react-window或rea…

js 实现评分

js 实现评分

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