当前位置:首页 > VUE

vue实现星星评价

2026-01-19 08:37:34VUE

实现星星评价组件

在Vue中实现星星评价功能,可以通过自定义组件完成。以下是一个完整的实现方案:

创建星星评价组件

新建一个StarRating.vue文件,包含以下代码:

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="rate(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
    >
      <span v-if="star <= currentRating">★</span>
      <span v-else-if="star <= hoverRating">★</span>
      <span v-else>☆</span>
    </span>
    <p v-if="showRating">当前评分: {{ currentRating }} / {{ maxStars }}</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: {
    rate(star) {
      this.currentRating = star;
      this.$emit('rating-changed', star);
    }
  }
}
</script>

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

使用星星评价组件

在父组件中引入并使用星星评价组件:

<template>
  <div>
    <h2>评价我们的产品</h2>
    <star-rating 
      :max-stars="5" 
      :initial-rating="3" 
      @rating-changed="handleRatingChange"
    />
  </div>
</template>

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

export default {
  components: {
    StarRating
  },
  methods: {
    handleRatingChange(rating) {
      console.log('新评分:', rating);
      // 可以在这里处理评分变化逻辑,如发送到API
    }
  }
}
</script>

实现半星评价功能

如果需要更精细的半星评价,可以修改组件如下:

<template>
  <div class="star-rating">
    <span 
      v-for="star in starsArray" 
      :key="star.index"
      @click="rate(star.value)"
      @mouseover="hoverRating = star.value"
      @mouseleave="hoverRating = 0"
    >
      <span v-if="star.value <= currentRating">★</span>
      <span v-else-if="star.value <= hoverRating">★</span>
      <span v-else-if="star.half && currentRating >= star.index - 0.5">½</span>
      <span v-else>☆</span>
    </span>
  </div>
</template>

<script>
export default {
  props: {
    maxStars: {
      type: Number,
      default: 5
    }
  },
  data() {
    return {
      currentRating: 0,
      hoverRating: 0
    }
  },
  computed: {
    starsArray() {
      const stars = [];
      for (let i = 1; i <= this.maxStars; i++) {
        stars.push({
          index: i,
          value: i,
          half: true
        });
      }
      return stars;
    }
  },
  methods: {
    rate(rating) {
      this.currentRating = rating;
    }
  }
}
</script>

添加动画效果

为星星评价添加悬停动画,可以修改CSS部分:

.star-rating span {
  transition: all 0.2s ease;
  margin-right: 5px;
}
.star-rating span:hover {
  transform: scale(1.2);
}

实现只读模式

添加只读属性,用于展示评分而不允许修改:

vue实现星星评价

<script>
export default {
  props: {
    readonly: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    rate(star) {
      if (!this.readonly) {
        this.currentRating = star;
        this.$emit('rating-changed', star);
      }
    }
  }
}
</script>

这些实现方案提供了完整的星星评价功能,包括基本评分、半星评价、动画效果和只读模式,可以根据实际需求选择或组合使用。

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

相关文章

vue点击实现星星评价

vue点击实现星星评价

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

css制作星星

css制作星星

CSS 制作星星的方法 使用 CSS 可以轻松创建星星效果,以下是几种常见的实现方式: 使用 Unicode 字符 直接使用 Unicode 中的星星符号,并通过 CSS 调整样式: .star…

js 实现星星打分

js 实现星星打分

实现星星打分功能 使用HTML、CSS和JavaScript可以创建一个交互式的星星打分系统。以下是一个完整的实现方法: HTML结构 <div class="star-rating">…

vue实现简单星星评分

vue实现简单星星评分

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

vue实现评价

vue实现评价

Vue 实现评价功能的方法 数据绑定与双向同步 在Vue中通过v-model实现评价内容的双向绑定,结合表单元素收集用户输入。例如文本评价可使用textarea,星级评分可用自定义组件。 <t…

如何评价react重构

如何评价react重构

React重构的评价 React重构通常指的是对现有React代码进行优化、重组或升级,以提高性能、可维护性或适应新需求。以下是React重构的主要评价维度: 性能优化 重构可以显著提升应用性能。通…