当前位置:首页 > VUE

vue实现星星

2026-01-12 09:12:57VUE

vue实现星星

Vue 实现星星评分功能

在 Vue 中实现星星评分功能可以通过组件化方式完成,以下是具体实现方法:

基础实现(静态评分)

<template>
  <div class="star-rating">
    <span 
      v-for="star in 5" 
      :key="star"
      @click="setRating(star)"
      :class="{ 'active': star <= currentRating }"
    >
      ★
    </span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentRating: 0
    }
  },
  methods: {
    setRating(rating) {
      this.currentRating = rating
    }
  }
}
</script>

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

.star-rating span.active {
  color: gold;
}
</style>

进阶实现(支持半星)

<template>
  <div class="star-rating">
    <span 
      v-for="star in 5" 
      :key="star"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
      @click="setRating(star)"
    >
      <span 
        v-if="star <= currentRating || (hoverRating && star <= hoverRating)"
        style="color: gold;"
      >
        ★
      </span>
      <span v-else style="color: #ccc;">★</span>
    </span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentRating: 0,
      hoverRating: 0
    }
  },
  methods: {
    setRating(rating) {
      this.currentRating = rating
    }
  }
}
</script>

封装为可复用组件

<!-- StarRating.vue -->
<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="rate(star)"
      @mouseover="hover(star)"
      @mouseleave="hover(0)"
    >
      <span :style="getStarStyle(star)">★</span>
    </span>
    <span v-if="showRating">{{ currentRating }} / {{ maxStars }}</span>
  </div>
</template>

<script>
export default {
  props: {
    rating: {
      type: Number,
      default: 0
    },
    maxStars: {
      type: Number,
      default: 5
    },
    showRating: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      currentRating: this.rating,
      hoverRating: 0
    }
  },
  methods: {
    rate(star) {
      this.currentRating = star
      this.$emit('rating-changed', star)
    },
    hover(star) {
      this.hoverRating = star
    },
    getStarStyle(star) {
      const color = star <= (this.hoverRating || this.currentRating) 
        ? 'gold' 
        : '#ccc'
      return { color, fontSize: '24px', cursor: 'pointer' }
    }
  }
}
</script>

使用组件示例

<template>
  <div>
    <star-rating 
      :rating="3" 
      @rating-changed="updateRating"
    />
    <p>当前评分: {{ userRating }}</p>
  </div>
</template>

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

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

这些实现方法可以根据具体需求进行调整,例如添加动画效果、自定义星星图标或与后端API集成等功能。

vue实现星星

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

相关文章

vue实现滑动

vue实现滑动

Vue 实现滑动效果 使用 CSS 过渡和动画 通过 Vue 的 transition 组件结合 CSS 过渡或动画实现滑动效果。适用于简单的元素入场/离场滑动。 <template>…

vue实现自动翻译

vue实现自动翻译

Vue 实现自动翻译的方法 在 Vue 项目中实现自动翻译功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方翻译 API 注册并获取翻译 API 的密钥(如 Google Transla…

vue实现皮肤切换

vue实现皮肤切换

实现皮肤切换的基本思路 在Vue中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是实…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <t…

vue实现压缩上传文件

vue实现压缩上传文件

压缩上传文件的实现方法 在Vue中实现文件压缩和上传功能,可以通过以下步骤完成。该方法结合了前端文件压缩库和HTTP请求,确保文件在上传前被有效压缩。 安装必要的依赖 需要使用compressor…

vue实现导航切换内容

vue实现导航切换内容

Vue实现导航切换内容的方法 在Vue中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容切…