快速实现滑动评分功能。这种方法不需要额外依赖库,适合简单场景…">
当前位置:首页 > 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,可以利用其内置的滑块组件实现评分功能。

<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实现图片搜索

Vue实现图片搜索功能 使用HTML5的File API获取图片 通过<input type="file">元素让用户选择图片文件,使用FileReader对象读取图片数据。 <…

vue 实现长列表

vue 实现长列表

Vue 实现长列表的优化方案 虚拟滚动技术 虚拟滚动是处理长列表的高效方式,仅渲染可视区域内的元素。通过计算滚动位置动态加载和卸载DOM节点,大幅减少内存占用和渲染压力。 <template&…

vue表单实现搜索

vue表单实现搜索

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

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="modal-…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录…

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…