当前位置:首页 > VUE

vue实现笑脸评价

2026-02-17 02:16:14VUE

实现笑脸评价组件

在Vue中实现笑脸评价功能,可以通过自定义组件结合CSS动画和交互逻辑完成。以下是具体实现方法:

安装必要依赖 需要安装@fortawesome/vue-fontawesome@fortawesome/free-solid-svg-icons来使用Font Awesome的笑脸图标:

npm install @fortawesome/vue-fontawesome @fortawesome/free-solid-svg-icons

创建SmileyRating组件

<template>
  <div class="smiley-rating">
    <div 
      v-for="(smiley, index) in smileys" 
      :key="index"
      @click="selectRating(index)"
      @mouseover="hoverRating = index"
      @mouseleave="hoverRating = null"
      :class="{ 
        'active': selectedRating === index,
        'hover': hoverRating === index
      }"
    >
      <font-awesome-icon 
        :icon="smiley.icon" 
        :class="`smiley-${index}`" 
      />
    </div>
  </div>
</template>

<script>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { 
  faFrown, 
  faMeh, 
  faSmile, 
  faLaughSquint,
  faGrinHearts
} from '@fortawesome/free-solid-svg-icons'

export default {
  components: { FontAwesomeIcon },
  data() {
    return {
      selectedRating: null,
      hoverRating: null,
      smileys: [
        { icon: faFrown, label: '非常不满意' },
        { icon: faMeh, label: '不满意' },
        { icon: faSmile, label: '一般' },
        { icon: faLaughSquint, label: '满意' },
        { icon: faGrinHearts, label: '非常满意' }
      ]
    }
  },
  methods: {
    selectRating(index) {
      this.selectedRating = index
      this.$emit('rating-selected', index + 1)
    }
  }
}
</script>

<style scoped>
.smiley-rating {
  display: flex;
  justify-content: space-around;
  font-size: 2rem;
  cursor: pointer;
}

.smiley-rating > div {
  transition: all 0.3s ease;
  transform: scale(1);
}

.smiley-rating > div:hover,
.smiley-rating > div.hover {
  transform: scale(1.2);
}

.smiley-rating > div.active {
  transform: scale(1.3);
  filter: drop-shadow(0 0 5px rgba(255, 215, 0, 0.7));
}

.smiley-0 { color: #ff6b6b; }
.smiley-1 { color: #ffb347; }
.smiley-2 { color: #f5e050; }
.smiley-3 { color: #7bed9f; }
.smiley-4 { color: #70a1ff; }
</style>

使用组件示例

在父组件中引入并使用:

<template>
  <div>
    <h3>请评价我们的服务</h3>
    <SmileyRating @rating-selected="handleRating" />
    <p v-if="rating">您选择了: {{ ratingText }}</p>
  </div>
</template>

<script>
import SmileyRating from './SmileyRating.vue'

export default {
  components: { SmileyRating },
  data() {
    return {
      rating: null,
      ratingTexts: [
        '非常不满意',
        '不满意',
        '一般',
        '满意',
        '非常满意'
      ]
    }
  },
  methods: {
    handleRating(rating) {
      this.rating = rating
      this.ratingText = this.ratingTexts[rating - 1]
    }
  }
}
</script>

自定义选项

可以根据需求调整以下参数:

  • 修改smileys数组中的图标和标签
  • 调整CSS中的颜色和动画效果
  • 改变评分数量(增减数组元素)
  • 添加工具提示显示每个笑脸的含义

动画增强效果

如需更生动的动画效果,可以添加CSS关键帧动画:

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

.smiley-rating > div.active {
  animation: bounce 0.5s ease;
}

无障碍访问优化

为提升无障碍体验,可以添加ARIA属性:

<div 
  role="button"
  :aria-label="smiley.label"
  tabindex="0"
  @keydown.enter="selectRating(index)"
>
  <!-- 图标内容 -->
</div>

以上实现方案提供了完整的笑脸评分组件,包含交互反馈和视觉动画效果,可根据实际项目需求进行调整。

vue实现笑脸评价

标签: 笑脸评价
分享给朋友:

相关文章

vue实现星星评价

vue实现星星评价

实现星星评价组件 在Vue中实现星星评价功能,可以通过自定义组件完成。以下是一个完整的实现方案: 创建星星评价组件 新建一个StarRating.vue文件,包含以下代码: <tem…

vue点击实现星星评价

vue点击实现星星评价

实现星星评价功能 在Vue中实现星星评价功能可以通过动态渲染星星图标并绑定点击事件来完成。以下是具体实现方法: 数据准备 定义评价等级和当前选中状态的数据: data() { return…

css制作笑脸

css制作笑脸

使用CSS绘制笑脸 通过CSS的伪元素和边框属性可以绘制简单的笑脸图案。以下是实现方法: HTML结构: <div class="smiley-face"></div&g…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 框架编写代码,同时生成 iOS 和 Android 应用,减少开发成…

如何评价 react native

如何评价 react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 编写代码,同时支持 iOS 和 Android 平台,减少重复开发工…

如何评价epic react

如何评价epic react

Epic React的评价 Epic React是由Kent C. Dodds开发的高级React课程,专注于帮助开发者深入理解React的核心概念和最佳实践。该课程适合有一定React基础的开发者,…