当前位置:首页 > VUE

vue实现简单星星评分

2026-02-09 15:42:31VUE

实现星星评分组件

在Vue中实现星星评分功能,可以通过组件化的方式完成。以下是一个简单的实现方案:

vue实现简单星星评分

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star" 
      @click="setRating(star)"
      @mouseover="hoverRating(star)"
      @mouseleave="resetRating"
      :class="{ 'active': star <= currentRating, 'hover': star <= hoverRating }"
    >
      ★
    </span>
    <p v-if="showRating">{{ currentRating }} of {{ maxStars }} stars</p>
  </div>
</template>

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

<style>
.star-rating span {
  font-size: 24px;
  color: #ccc;
  cursor: pointer;
  transition: color 0.2s;
}

.star-rating span.active {
  color: gold;
}

.star-rating span.hover {
  color: orange;
}
</style>

使用组件示例

在父组件中使用星星评分组件:

vue实现简单星星评分

<template>
  <div>
    <star-rating 
      :max-stars="5" 
      :initial-rating="3" 
      @rating-selected="handleRating"
    />
  </div>
</template>

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

export default {
  components: {
    StarRating
  },
  methods: {
    handleRating(rating) {
      console.log('Selected rating:', rating);
    }
  }
}
</script>

可选功能扩展

增加半星评分功能:

<template>
  <div class="star-rating">
    <span 
      v-for="star in fullStars" 
      :key="'full-' + star"
      @click="setRating(star)"
    >
      ★
    </span>
    <span 
      v-if="hasHalfStar"
      @click="setRating(fullStars + 0.5)"
    >
      ½
    </span>
    <span 
      v-for="star in emptyStars" 
      :key="'empty-' + star"
      @click="setRating(fullStars + hasHalfStar + star)"
    >
      ☆
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    },
    rating: {
      type: Number,
      default: 0
    }
  },
  computed: {
    fullStars() {
      return Math.floor(this.rating);
    },
    hasHalfStar() {
      return this.rating % 1 >= 0.5;
    },
    emptyStars() {
      return this.maxStars - this.fullStars - (this.hasHalfStar ? 1 : 0);
    }
  },
  methods: {
    setRating(rating) {
      this.$emit('update:rating', Math.min(rating, this.maxStars));
    }
  }
}
</script>

样式优化建议

对于更精美的视觉效果,可以使用CSS动画和变换:

.star-rating span {
  font-size: 2rem;
  color: #ddd;
  cursor: pointer;
  transition: all 0.2s ease-in-out;
}

.star-rating span:hover {
  transform: scale(1.2);
}

.star-rating span.active {
  color: #ffc107;
  text-shadow: 0 0 5px rgba(255, 193, 7, 0.5);
}

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

相关文章

vue滑动评分实现

vue滑动评分实现

Vue 滑动评分实现 使用原生 HTML5 range 输入 在 Vue 中可以通过 <input type="range"> 快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景…

vue实现评分案例

vue实现评分案例

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

vue实现星级评分效果

vue实现星级评分效果

实现星级评分的基础结构 使用Vue实现星级评分需要构建一个可交互的星级组件。基本思路是通过v-for循环生成星星图标,并通过动态绑定类名或样式来控制选中状态。 <template>…

vue实现星星评分原理

vue实现星星评分原理

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

vue实现点击星星评分

vue实现点击星星评分

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

vue点击实现星星评价

vue点击实现星星评价

实现星星评价功能 在Vue中实现星星评价功能可以通过动态渲染星星图标并绑定点击事件来完成。以下是具体实现方法: 数据准备 定义评价等级和当前选中状态的数据: data() { return…