当前位置:首页 > VUE

vue实现星星

2026-03-06 22:11:33VUE

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="index in 5"
      :key="index"
      @mouseover="hoverRating = index"
      @mouseleave="hoverRating = 0"
      @click="setRating(index)"
    >
      <span v-if="index <= currentRating">★</span>
      <span v-else-if="index - 0.5 <= currentRating">½</span>
      <span v-else>☆</span>
    </span>
  </div>
</template>

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

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

使用第三方库实现

对于更复杂的评分需求,可以考虑使用现成的 Vue 评分组件库:

  1. 安装 vue-star-rating 库:

    npm install vue-star-rating
  2. 在组件中使用:

    
    <template>
    <star-rating 
     :rating="rating"
     @rating-selected="setRating"
     :star-size="30"
     :rounded-corners="true"
     :border-width="2"
    />
    </template>
import StarRating from 'vue-star-rating'

export default { components: { StarRating }, data() { return { rating: 3.5 } }, methods: { setRating(rating) { this.rating = rating } } }

```

自定义 SVG 星星实现

如果需要完全自定义星星样式,可以使用 SVG:

vue实现星星

<template>
  <div class="star-container">
    <svg 
      v-for="i in 5"
      :key="i"
      @click="setRating(i)"
      :class="{ 'filled': i <= currentRating }"
      width="24" 
      height="24" 
      viewBox="0 0 24 24"
    >
      <path 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>

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

<style>
.star-container svg {
  fill: #ddd;
  cursor: pointer;
  margin-right: 5px;
}
.star-container svg.filled {
  fill: #ffc107;
}
</style>

以上实现方式可根据实际需求选择或组合使用,基础实现适合简单评分场景,第三方库提供更多配置选项,SVG 实现则允许完全自定义星星样式。

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

相关文章

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

vue实现登录退出

vue实现登录退出

实现登录功能 在Vue中实现登录功能通常需要结合表单验证、API请求和状态管理。以下是一个基础实现示例: 安装必要依赖(如axios和vuex): npm install axios vuex 创…

vue点击实现动画

vue点击实现动画

Vue 中实现点击动画的方法 使用 Vue 过渡(Transition)组件 Vue 提供了内置的 <transition> 组件,可以轻松实现元素进入/离开的动画效果。结合 v-if 或…