当前位置:首页 > VUE

vue怎么实现点星

2026-01-22 22:53:48VUE

在 Vue 中实现点星(星级评分)功能可以通过多种方式完成,以下是几种常见的方法:

使用 v-for 动态渲染星星

通过 v-for 循环生成星星图标,结合点击事件动态切换选中状态:

vue怎么实现点星

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

<script>
export default {
  data() {
    return {
      selectedStars: 0
    }
  },
  methods: {
    rate(star) {
      this.selectedStars = star
    }
  }
}
</script>

<style>
.active {
  color: gold;
}
</style>

使用第三方组件库

许多 UI 库提供了现成的星级评分组件,例如 Element UI 的 Rate 组件:

vue怎么实现点星

<template>
  <el-rate v-model="rating"></el-rate>
</template>

<script>
import { ElRate } from 'element-plus'

export default {
  components: {
    ElRate
  },
  data() {
    return {
      rating: 0
    }
  }
}
</script>

自定义 SVG 星星

使用 SVG 创建更灵活的星星形状,并通过计算属性控制填充状态:

<template>
  <div>
    <svg 
      v-for="star in 5" 
      :key="star"
      @click="rate(star)"
      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"
        :fill="star <= selectedStars ? 'gold' : 'gray'"
      />
    </svg>
  </div>
</template>

实现半星评分

如果需要支持半星评分,可以扩展基本实现:

<template>
  <div>
    <span 
      v-for="star in 5" 
      :key="star"
      @click="rate(star)"
      @mousemove="hoverRating = star"
      @mouseleave="hoverRating = null"
    >
      <span v-if="star <= (hoverRating || selectedStars)">★</span>
      <span v-else-if="star - 0.5 <= (hoverRating || selectedStars)">½</span>
      <span v-else>☆</span>
    </span>
  </div>
</template>

每种方法都有其适用场景,简单项目可以使用原生实现,复杂项目推荐使用成熟的组件库以获得更好的交互体验和可访问性。

标签: vue
分享给朋友:

相关文章

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…

vue 轮询实现

vue 轮询实现

轮询的基本概念 轮询是一种通过定时向服务器发送请求来获取最新数据的技术。适用于需要实时更新但无法使用WebSocket的场景。 使用setInterval实现轮询 在Vue组件中,可以通过setIn…

vue 实现穿透

vue 实现穿透

Vue 样式穿透的实现方法 在 Vue 中,样式穿透通常指在带有 scoped 属性的样式块中,强制影响子组件的样式。以下是几种常见的实现方式: 使用 >>> 或 /deep/ 选…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…

vue框架实现CRM

vue框架实现CRM

Vue框架实现CRM系统 使用Vue框架构建CRM(客户关系管理)系统需要结合前端技术栈和后端API。以下为关键实现方法: 技术选型 核心框架:Vue 3(Composition API) UI组件…