当前位置:首页 > 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样式增强视觉效果,可以使用过渡动画和颜色变化提升用户体验:

vue实现评分案例

<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>

支持半星评分

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

vue实现评分案例

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>

组件使用示例

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

<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 实现评分功能通常需要以下核心逻辑:通过数据绑定动态渲染星星图标,根据用户交互(点击或悬停)更新评分状态,并支持自定义样式和功能。 基础实现方案 模板…

vue实现评分

vue实现评分

实现评分功能的基本方法 使用Vue实现评分功能可以通过多种方式完成,常见的方法包括基于组件、自定义指令或第三方库。以下是几种典型实现方案。 基于组件的评分实现 创建一个可复用的评分组件,利用v-f…

uniapp项目案例

uniapp项目案例

uniapp项目案例概述 uniapp作为跨平台开发框架,广泛应用于多端应用开发(H5、小程序、App等)。以下是一些典型项目案例及实现方法,涵盖电商、社交、工具等场景。 电商类案例 案例:…

vue实现酒店案例

vue实现酒店案例

实现酒店案例的Vue开发指南 使用Vue框架开发酒店类案例应用时,通常涉及房源展示、预订系统、用户评价等核心功能模块。以下是关键实现方法: 项目初始化与配置 通过Vue CLI创建项目基础结构,…

vue实现星级评分

vue实现星级评分

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

VUE网站案例实现

VUE网站案例实现

VUE网站案例实现方法 基础项目搭建 使用Vue CLI创建新项目,安装必要依赖: npm install -g @vue/cli vue create vue-website cd vue-web…