当前位置:首页 > VUE

vue实现打星

2026-02-20 02:23:05VUE

Vue 实现打星评分功能

基础实现思路

使用v-for循环生成星星图标,通过动态绑定class或样式实现选中效果。核心逻辑是通过点击或鼠标悬停事件改变当前选中的星数。

代码示例

<template>
  <div class="star-rating">
    <span 
      v-for="star in maxStars" 
      :key="star"
      @click="setRating(star)"
      @mouseover="hoverRating = star"
      @mouseleave="hoverRating = 0"
      :class="{
        'active': star <= (hoverRating || currentRating),
        'inactive': star > (hoverRating || currentRating)
      }"
    >★</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      maxStars: 5,
      currentRating: 0,
      hoverRating: 0
    }
  },
  methods: {
    setRating(star) {
      this.currentRating = star
      this.$emit('rating-changed', star)
    }
  }
}
</script>

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

组件化封装

将评分组件独立封装,通过props接收配置参数:

vue实现打星

props: {
  maxStars: {
    type: Number,
    default: 5
  },
  initialRating: {
    type: Number,
    default: 0
  },
  disabled: {
    type: Boolean,
    default: false
  }
}

进阶功能实现

支持半星评分需要更复杂的逻辑处理:

vue实现打星

// 计算实际显示的星数
displayRating(rating) {
  return Math.round(rating * 2) / 2
}

使用第三方库

推荐使用专门为Vue设计的评分组件库:

  • vue-star-rating
  • vue-rate 安装后直接引入使用:
    
    import VueStarRating from 'vue-star-rating'

export default { components: { VueStarRating } }



#### 注意事项
- 移动端需要考虑触摸事件
- 可访问性需要添加ARIA标签
- 双向绑定建议使用v-model实现
- 大型项目建议将样式抽离为SCSS变量

标签: vue
分享给朋友:

相关文章

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建…