快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景…">
当前位置:首页 > VUE

vue滑动评分实现

2026-01-16 18:07:41VUE

Vue 滑动评分实现

使用原生 HTML5 range 输入

在 Vue 中可以通过 <input type="range"> 快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景。

<template>
  <div>
    <input 
      type="range" 
      min="0" 
      max="5" 
      step="0.5" 
      v-model="rating"
      @input="updateRating"
    >
    <p>当前评分: {{ rating }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0
    }
  },
  methods: {
    updateRating() {
      console.log('评分更新:', this.rating);
    }
  }
}
</script>

使用第三方库 vue-star-rating

对于更丰富的评分功能,可以使用专门为 Vue 设计的评分组件库。

安装 vue-star-rating:

npm install vue-star-rating

实现代码:

<template>
  <div>
    <star-rating 
      v-model:rating="rating"
      :increment="0.5"
      :max-rating="5"
      :star-size="30"
      @update:rating="updateRating"
    />
  </div>
</template>

<script>
import StarRating from 'vue-star-rating';

export default {
  components: {
    StarRating
  },
  data() {
    return {
      rating: 0
    }
  },
  methods: {
    updateRating(rating) {
      console.log('新评分:', rating);
    }
  }
}
</script>

自定义滑动评分组件

如果需要完全自定义样式和行为,可以创建自己的评分组件。

<template>
  <div class="custom-rating">
    <div 
      class="rating-bar"
      @mousemove="handleMouseMove"
      @click="setRating"
      ref="ratingBar"
    >
      <div class="rating-fill" :style="{ width: fillWidth }"></div>
    </div>
    <div class="rating-value">{{ displayRating }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      rating: 0,
      maxRating: 5,
      isDragging: false
    }
  },
  computed: {
    fillWidth() {
      return `${(this.rating / this.maxRating) * 100}%`;
    },
    displayRating() {
      return this.rating.toFixed(1);
    }
  },
  methods: {
    handleMouseMove(e) {
      if (!this.isDragging) return;
      this.calculateRating(e);
    },
    setRating(e) {
      this.calculateRating(e);
    },
    calculateRating(e) {
      const bar = this.$refs.ratingBar;
      const rect = bar.getBoundingClientRect();
      const position = e.clientX - rect.left;
      const percentage = Math.min(Math.max(position / rect.width, 0), 1);
      this.rating = percentage * this.maxRating;
      this.$emit('update:rating', this.rating);
    }
  },
  mounted() {
    document.addEventListener('mousedown', () => {
      this.isDragging = true;
    });
    document.addEventListener('mouseup', () => {
      this.isDragging = false;
    });
  }
}
</script>

<style>
.custom-rating {
  width: 200px;
}
.rating-bar {
  height: 20px;
  background: #eee;
  position: relative;
  cursor: pointer;
}
.rating-fill {
  height: 100%;
  background: #ffcc00;
}
.rating-value {
  text-align: center;
  margin-top: 5px;
}
</style>

使用 Vuetify 的滑块组件

如果项目中使用 Vuetify,可以利用其内置的滑块组件实现评分功能。

vue滑动评分实现

<template>
  <v-slider
    v-model="rating"
    :max="5"
    :step="0.5"
    thumb-label
    ticks
  >
    <template v-slot:thumb-label="{ value }">
      {{ value.toFixed(1) }}
    </template>
  </v-slider>
</template>

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

每种方法适用于不同场景,原生HTML5方案最简单,第三方库提供更多功能,自定义组件灵活性最高,Vuetify方案适合使用该UI框架的项目。根据项目需求选择最合适的实现方式。

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

相关文章

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…

vue实现word文档实现预览

vue实现word文档实现预览

在Vue中实现Word文档预览可以通过多种方式实现,以下是几种常见的方法: 使用mammoth.js库 mammoth.js是一个将Word文档(.docx)转换为HTML的JavaScript库,…

vue实现数据联动

vue实现数据联动

Vue 数据联动实现方法 数据联动在 Vue 中通常指多个组件或数据项之间的动态关联更新。以下是几种常见实现方式: 使用 v-model 和计算属性 <template> <…

vue前端实现教程

vue前端实现教程

Vue 前端实现基础教程 环境准备 安装 Node.js(建议 LTS 版本)和 npm/yarn。 通过命令行全局安装 Vue CLI: npm install -g @vue/cli 创建项…