当前位置: 首页 > news >正文

日常学习开发记录-rate评价组件

日常学习开发记录-rate评价组件

  • 1.最终效果
  • 2.核心思路
  • 3.部分代码

1.最终效果

Rate 评分组件是一个用于展示和收集用户评分的交互组件,常用于商品评价、服务评分等场景。本文将从实现思路、核心功能方面详细介绍如何实现一个功能完善的评分组件。
最终实现效果:
在这里插入图片描述

2.核心思路

核心思路:动态计算每颗星的填充比例

      getStarWidth(index) {if (this.disabled && this.showScore) {const decimal = this.value - index;return decimal >= 1 ? '100%' : `${Math.max(decimal, 0) * 100}%`;}if (this.hoverValue === -1) {const decimal = this.value - index;return decimal >= 1 ? '100%' : '0%';}const decimal = this.hoverValue - index;return decimal >= 1 ? '100%' : '0%';},

3.部分代码

<template><div class="my-rate" :class="{ 'is-disabled': disabled && !showScore }"><divv-for="(item, index) in max":key="index"class="my-rate__item":class="{ 'is-disabled': disabled && !showScore }"@mousemove="handleMouseMove($event, item)"@mouseleave="handleMouseLeave"@click="handleClick(item)"><!-- 底层灰色星 --><slot :size="size" :color="voidColor" :index="index" :item="item"><svgt="1747122044589"class="icon"viewBox="0 0 1024 1024"version="1.1"xmlns="http://www.w3.org/2000/svg"p-id="4627":width="size":height="size":fill="voidColor"><pathd="M781.186088 616.031873q17.338645 80.573705 30.59761 145.848606 6.119522 27.537849 11.219124 55.075697t9.689243 49.976096 7.649402 38.247012 4.079681 19.888446q3.059761 20.398406-9.179283 27.027888t-27.537849 6.629482q-5.099602 0-14.788845-3.569721t-14.788845-5.609562l-266.199203-155.027888q-72.414343 42.836653-131.569721 76.494024-25.498008 14.278884-50.486056 28.557769t-45.386454 26.517928-35.187251 20.398406-19.888446 10.199203q-10.199203 5.099602-20.908367 3.569721t-19.378486-7.649402-12.749004-14.788845-2.039841-17.848606q1.01992-4.079681 5.099602-19.888446t9.179283-37.737052 11.729084-48.446215 13.768924-54.055777q15.298805-63.23506 34.677291-142.788845-60.175299-52.015936-108.111554-92.812749-20.398406-17.338645-40.286853-34.167331t-35.697211-30.59761-26.007968-22.438247-11.219124-9.689243q-12.239044-11.219124-20.908367-24.988048t-6.629482-28.047809 11.219124-22.438247 20.398406-10.199203l315.155378-28.557769 117.290837-273.338645q6.119522-16.318725 17.338645-28.047809t30.59761-11.729084q10.199203 0 17.848606 4.589641t12.749004 10.709163 8.669323 12.239044 5.609562 10.199203l114.231076 273.338645 315.155378 29.577689q20.398406 5.099602 28.557769 12.239044t8.159363 22.438247q0 14.278884-8.669323 24.988048t-21.928287 26.007968z"p-id="4628"></path></svg></slot><div class="star-filled" :style="{ width: getStarWidth(index) }"><!-- 上层彩色星(通过遮罩控制显示比例) --><slot :size="size" :color="getIconColor(item)" :index="index" :item="item"><svgt="1747122044589"class="icon"viewBox="0 0 1024 1024"version="1.1"xmlns="http://www.w3.org/2000/svg"p-id="4627":width="size":height="size":fill="getIconColor(item)"><pathd="M781.186088 616.031873q17.338645 80.573705 30.59761 145.848606 6.119522 27.537849 11.219124 55.075697t9.689243 49.976096 7.649402 38.247012 4.079681 19.888446q3.059761 20.398406-9.179283 27.027888t-27.537849 6.629482q-5.099602 0-14.788845-3.569721t-14.788845-5.609562l-266.199203-155.027888q-72.414343 42.836653-131.569721 76.494024-25.498008 14.278884-50.486056 28.557769t-45.386454 26.517928-35.187251 20.398406-19.888446 10.199203q-10.199203 5.099602-20.908367 3.569721t-19.378486-7.649402-12.749004-14.788845-2.039841-17.848606q1.01992-4.079681 5.099602-19.888446t9.179283-37.737052 11.729084-48.446215 13.768924-54.055777q15.298805-63.23506 34.677291-142.788845-60.175299-52.015936-108.111554-92.812749-20.398406-17.338645-40.286853-34.167331t-35.697211-30.59761-26.007968-22.438247-11.219124-9.689243q-12.239044-11.219124-20.908367-24.988048t-6.629482-28.047809 11.219124-22.438247 20.398406-10.199203l315.155378-28.557769 117.290837-273.338645q6.119522-16.318725 17.338645-28.047809t30.59761-11.729084q10.199203 0 17.848606 4.589641t12.749004 10.709163 8.669323 12.239044 5.609562 10.199203l114.231076 273.338645 315.155378 29.577689q20.398406 5.099602 28.557769 12.239044t8.159363 22.438247q0 14.278884-8.669323 24.988048t-21.928287 26.007968z"p-id="4628"></path></svg></slot></div></div><span v-if="showText" class="my-rate__text">{{ currentText }}</span><span v-if="showScore" class="my-rate__score">{{ displayValue }}</span></div>
</template>

相关文章:

  • docker-compose部署thingsboard/tb-cassandra
  • MySQL:关系模型的基本理论
  • 这类物种组织heatmap有点东西
  • 贪心算法:最小生成树
  • idea2021创建web项目及其整合tomcat
  • base64形式的图片数据保存方法
  • 深入解析 I/O 模型:原理、区别与 Java 实践
  • 前端——布局方式
  • 【老飞飞源码】新版高清飞飞源码+数据库+客户端+服务器端完整文件打包
  • 易境通海外仓系统:中转业务管理的智能化解决方案!
  • 北三短报文数传终端:筑牢水利防汛“智慧防线”,守护江河安澜
  • 机器学习2
  • (vue)el-steps从别的页面跳转进来怎么实现和点击同样效果
  • 【前缀和】和为 K 的子数组(medium)
  • 需求与技术实现不匹配,如何协调
  • MyBatis-Plus的批量插入与原生JDBC效率对比
  • 【IEEE出版 | EI稳定检索】第十届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2025)
  • 配置hadoop集群-启动集群
  • 求由无穷串构成的二进制数的值
  • 短板效应--双指针
  • 著名学者黄修己去世,享年90岁
  • 韩国执政党总统候选人更换方案被否决,金文洙候选人资格即刻恢复
  • 【社论】职业上新,勇于“尝新”
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%
  • 第1现场 | 50多年来首次!印度举行大规模民防演习
  • 西安碑林博物馆票价将调至85元,工作人员:10元属于改扩建期间惠民票