鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
UniApp 制作个性化的评分星级组件
在移动应用开发中,评分星级组件(Rating Star)是用户交互和反馈的重要工具,广泛应用于电商、外卖、内容社区等场景。一个美观、易用、可定制的评分组件,不仅能提升用户体验,还能增强产品的互动性。随着 HarmonyOS(鸿蒙)生态的不断壮大,如何用 UniApp 实现一个兼容鸿蒙的个性化评分星级组件,成为许多开发者关注的话题。本文将结合实际项目经验,详细讲解如何用 UniApp 制作一个灵活、可扩展、适配鸿蒙的评分星级组件。
为什么要自定义评分星级组件?
虽然市面上有一些现成的评分组件,但在实际项目中,往往会遇到如下需求:
- 支持半星、整星、可自定义星星数量;
- 支持自定义星星图标、颜色、大小、动画效果;
- 兼容多端,尤其是 HarmonyOS 设备的适配和体验优化;
- 支持只读、可编辑、带提示文字等多种模式。
自定义组件不仅能满足个性化需求,还能提升整体产品体验。
组件设计思路
设计一个评分星级组件,需要考虑以下几个方面:
- 星星数量与分值:支持自定义星星数量、当前分值、最小步长(如半星)。
- 交互体验:支持点击、滑动选择分数,动画反馈。
- 样式定制:支持自定义图标、颜色、大小、间距等。
- 鸿蒙适配:在鸿蒙端保证手势、动画、图标渲染等能力正常。
- 易用性与扩展性:props 设计合理,便于业务集成和后续扩展。
组件实现
我们以一个通用的 RatingStar 组件为例,支持自定义星星数量、分值、颜色、大小、只读等。
1. 组件结构
在 components/rating-star/rating-star.vue
下新建组件:
<template><view class="rating-star" :style="{ fontSize: size }"><viewv-for="(star, idx) in starCount":key="idx"class="star-item"@touchstart="onTouch(idx, $event)"@click="onClick(idx, $event)"><text:class="getStarClass(idx)":style="{ color: getStarColor(idx) }">{{ getStarIcon(idx) }}</text></view><text v-if="showText" class="rating-text">{{ displayText }}</text></view>
</template><script>
export default {name: 'RatingStar',props: {value: {type: Number,default: 0},starCount: {type: Number,default: 5},allowHalf: {type: Boolean,default: false},size: {type: String,default: '48rpx'},color: {type: String,default: '#ffd21e'},voidColor: {type: String,default: '#e5e5e5'},icon: {type: String,default: '★'},voidIcon: {type: String,default: '☆'},readonly: {type: Boolean,default: false},showText: {type: Boolean,default: false},texts: {type: Array,default: () => ['很差', '较差', '一般', '满意', '非常满意']}},data() {return {innerValue: this.value};},watch: {value(val) {this.innerValue = val;}},computed: {displayText() {if (!this.showText) return '';let idx = Math.ceil(this.innerValue) - 1;return this.texts[idx] || '';}},methods: {getStarClass(idx) {if (this.allowHalf && this.innerValue - idx > 0 && this.innerValue - idx < 1) {return 'star-half';}return this.innerValue > idx ? 'star-full' : 'star-void';},getStarColor(idx) {return this.innerValue > idx ? this.color : this.voidColor;},getStarIcon(idx) {if (this.allowHalf && this.innerValue - idx > 0 && this.innerValue - idx < 1) {return this.icon; // 可扩展为半星图标}return this.innerValue > idx ? this.icon : this.voidIcon;},onTouch(idx, e) {if (this.readonly) return;if (this.allowHalf) {const touch = e.touches[0];const rect = e.currentTarget.getBoundingClientRect();const isHalf = touch.clientX - rect.left < rect.width / 2;this.innerValue = isHalf ? idx + 0.5 : idx + 1;} else {this.innerValue = idx + 1;}this.$emit('input', this.innerValue);this.$emit('change', this.innerValue);},onClick(idx, e) {if (this.readonly) return;if (!this.allowHalf) {this.innerValue = idx + 1;this.$emit('input', this.innerValue);this.$emit('change', this.innerValue);}}}
};
</script><style scoped>
.rating-star {display: flex;align-items: center;
}
.star-item {margin-right: 8rpx;user-select: none;
}
.star-full {color: #ffd21e;transition: color 0.2s;
}
.star-void {color: #e5e5e5;transition: color 0.2s;
}
.star-half {color: #ffd21e;position: relative;
}
.rating-text {margin-left: 16rpx;font-size: 28rpx;color: #888;
}
</style>
2. 组件使用示例
在页面中引用并使用 RatingStar 组件,实现评分交互:
<template><view class="demo-rating"><rating-star v-model="score" :starCount="5" :allowHalf="true" :showText="true" /><text class="score-text">当前评分:{{ score }}</text><rating-star :value="4" :starCount="7" color="#ff4d4f" voidColor="#eee" :readonly="true" :showText="true" :texts="['极差','很差','一般','良好','满意','优秀','满分']" /></view>
</template><script>
import RatingStar from '@/components/rating-star/rating-star.vue';export default {components: { RatingStar },data() {return {score: 3.5};}
};
</script><style scoped>
.demo-rating {padding: 40rpx;
}
.score-text {margin-top: 24rpx;font-size: 32rpx;color: #333;
}
</style>
3. HarmonyOS 适配与优化建议
- 手势体验:鸿蒙端对 touch/click 事件支持良好,半星交互流畅。建议在真机多端测试。
- 图标自定义:可用 SVG、图片等自定义星星图标,提升视觉效果。
- 动画优化:可结合 CSS 动画或帧动画,提升评分时的动感体验。
- UI 细节:鸿蒙设备分辨率多样,建议用
vw
/rpx
单位自适应。 - 无障碍支持:可为星星添加 aria-label,提升可访问性。
4. 实际案例与体验优化
在某鸿蒙快应用项目中,评分星级组件用于商品评价、内容打分等场景,结合后端接口实现评分统计和展示。实际开发中还可结合以下优化:
- 支持自定义提示文字、动态颜色;
- 评分后弹窗感谢或引导评论;
- 只读模式下支持展示历史评分、平均分等;
- 结合表单校验,评分为必填项时高亮提示。
总结
基于 UniApp 的评分星级组件方案,既能兼容 HarmonyOS 生态,也能满足多端统一开发需求。通过灵活的 props 设计、交互优化和样式定制,可以为用户带来高效、愉悦的评分体验。希望本文能为你的鸿蒙/UniApp 项目提供实用参考。
如有问题或更好的实现思路,欢迎留言交流!
相关文章:
鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
UniApp 制作个性化的评分星级组件 在移动应用开发中,评分星级组件(Rating Star)是用户交互和反馈的重要工具,广泛应用于电商、外卖、内容社区等场景。一个美观、易用、可定制的评分组件,不仅能提升用户体验࿰…...

云效流水线Flow使用记录
概述 最近在频繁使用阿里云云效的几款产品,如流水线。之前写过一篇,参考云效流水线缓存问题。 这篇文章来记录更多问题。 环境变量 不管是云效流水线Flow还是应用交付AppStack(基于流水线,后文不再赘述)࿰…...

OpenCV CUDA模块图像处理------颜色空间处理之颜色空间转换函数cvtColor()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上进行颜色空间转换,支持多种常见的颜色空间转换操作。 函数原型 void cv::cuda::cvtColor (InputArray src…...

科技初创企业创新推动商业未来
在这个因变革而蓬勃发展的世界里,科技初创企业已成为各行业创新、颠覆与转型的驱动力。这些雄心勃勃的企业正在重塑商业格局,挑战既定规范,并不断突破可能性的边界。本文将深入探索科技初创企业的精彩领域,探讨它们如何通过创新塑…...
人工智能文科能学吗?
文科生也可以学习人工智能(AI),尽管这一领域传统上与数学和计算机科学联系紧密。然而,随着跨学科研究的发展,越来越多的人认识到文科背景在AI领域的价值。以下是一些文科生在学习AI时可以考虑的优势和需要克服的挑战&a…...
Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
第一部分: 1: kd> g Breakpoint 3 hit nt!CcGetVacbMiss: 80a1a19e 6a30 push 30h 1: kd> kc # 00 nt!CcGetVacbMiss 01 nt!CcGetVirtualAddress 02 nt!CcMapData 03 Ntfs!NtfsMapStream 04 Ntfs!NtfsReadBootSector Ntfs…...

猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
猿大师办公助手作为第三代WebOffice方案,猿大师办公助手把本地原生Office无缝嵌入网页环境中实现在线编辑Office功能,提供了完全与本机Office一致(排版、打印等)的操作体验,保留100%原生功能(VBA宏、复杂公…...

etcd:高可用,分布式的key-value存储系统
引言 etcd是基于go语言开发的一款kv存储引擎,基于raft一致性算法实现的一种存储 一.etcd的底层原理 1.etcd的特点 高可用性与一致性:etcd 使用 Raft 算法保证集群中数据的强一致性,即使在节点故障的情况下也能保持数据完整性。 分布式存储&a…...

AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
随着AI的技术进步和工具普及,尤其是在这两年的跃进之后,AI在游戏行业内的应用已经逐步由理念设想推向落地实践。从蔡浩宇披露的AI新游《Whispers From The Star》到GDC上各大厂家呈现的游戏AI新亮点,我们看到了更多AI与游戏的结合方式&#x…...

欢乐熊大话蓝牙知识11:如何打造一个低功耗蓝牙温湿度传感器?
🧊 如何打造一个低功耗蓝牙温湿度传感器? 用电像抠门老头,通信像特工密谈。 🌡️ 引子:为什么你需要一个低功耗 BLE 传感器? 你是不是有过这种需求: 想在办公室角落放个传感器看温湿度,却不想拉电源线?想给智能养宠箱加个环境感知模块,但不能三天一换电池?想造个…...

Linux 安装 Remmina
欢迎关注公号:每日早参,第一时间获取AI资讯! 为什么安装Remmina, 因为Mobaxterm免费版本有窗口限制。 Remmina 是一款功能强大的开源远程桌面客户端,适用于 Linux 和其他类 Unix 系统,也支持 Windows 平台。 安装指南…...

什么是HTTP HTTP 和 HTTPS 的区别
HTTP协议定义 超文本传输协议(HyperText Transfer Protocol, HTTP)是一种应用层协议,主要用于客户端与服务器之间的数据交换。它基于请求-响应模型运行,在每次会话中由客户端发起请求,服务器返回相应的内容。 HTTP 是…...
cos和dmz学习
COS(Capability Open Service) 组件主要为系统提供能力开放的入口和控制。系统中需要对外进行能力开放的组件将RESTful的API接口注册到COS组件中,第三方系统就可以通过调用API来获取组件提供的能力。应用场景:当你想调用的外部系统接口不支持外网访问时&…...
上升沿计数 stm32 中断
在STM32上利用中断实现上升沿计数,可以按照以下步骤进行,这里以STM32F1系列为例,使用HAL库进行代码编写: 1. STM32CubeMX配置 打开STM32CubeMX并创建一个新工程,选择对应的STM32微控制器型号(如STM32F103C8T6)。在Pinout & Configuration选项卡中,找到用于检测上升…...
Java 各版本核心新特性的详细说明
一、Java 8(2014)—— 函数式编程的里程碑 1. Lambda 表达式 作用:简化匿名内部类,支持函数式编程。示例:// 传统匿名内部类 Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("He…...
Nginx 性能优化全解析:从进程到安全的深度实践
一、进程优化:释放硬件性能潜力 Nginx 通过多工作进程处理请求,合理配置进程参数能充分利用 CPU 资源,避免资源浪费。 1.1 worker_processes 参数详解 worker_processes用于设置 Nginx 工作进程的数量,它直接影响 Nginx 对 CP…...

Pycharm and Flask 的学习心得(10)重定向
一 定义: 服务器告诉浏览器:你现在访问的这个页面,请改去另一个地址访问。 浏览器接收到这个“指令”后,会 自动跳转到另一个网页。 二 如何写: 方法一:重定向到网址 方法二:重定向到自己的…...

单机Kafka配置ssl并在springboot使用
目录 SSL证书生成根证书生成服务端和客户端证书生成keystore.jks和truststore.jks辅助脚本单独生成truststore.jks 环境配置hosts文件kafka server.properties配置ssl 启动kafkakafka基础操作springboot集成准备工作需要配置的文件开始消费 SSL证书 证书主要包含两大类&#x…...
《棒球特长生》棒球升学途径·棒球1号位
美国大学棒球体系 | U.S. College Baseball System 美国大学棒球主要通过 NCAA(全国大学体育协会)和 NAIA(全美校际体育协会)组织,分为三个级别: NCAA Division I:竞技水平最高,提…...
JavaScript的call和apply
在 JavaScript 中,.call() 和 .apply() 都是 Function 原型上的方法,用于改变函数执行时的上下文对象(即 this 指向),它们的区别仅在于参数传递的形式不同。下面结合几个常见场景,说明它们的实际应用。 1. …...
DiT、 U-Net 与自回归模型的优势
DiT 相对于 U-Net 的优势 全局自注意力 vs. 局部卷积 U-Net 依赖卷积和池化/上采样来逐层扩大感受野,捕捉全局信息需要堆叠很多层或借助跳跃连接(skip connections)。DiT 在每个分辨率阶段都用 Transformer 模块(多头自注意力 ML…...
开源 FcDesigner 表单设计器组件事件详解
FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 …...
Teigha应用——解析CAD文件(DWG格式)Teigha在CAD C#二次开发中的基本应用
Teigha是一款专为开发者设计的工具,其核心技术在于强大的API和丰富的功能集,提供了一系列工具和方法,使开发者能够轻松地读取、解析和操作DWG文件。它支持多种操作系统,能在处理大型DWG文件时保持高效性能,还可用于构建…...

C++23内存分配新特性:std::allocate_at_least
文章目录 一、背景与动机二、std::allocator::allocate_at_least的特性三、std::allocate_at_least的自由函数版本四、实际应用场景1. 动态容器的优化2. 自定义分配器 五、总结 在C23标准中, std::allocate_at_least和 std::allocator::allocate_at_least的引入为…...
JavaScript性能优化全景指南
JavaScript性能优化全景指南 Ⅰ. 加载性能优化 1.1 代码分割与懒加载 动态导入(ES2020) javascript // 路由级代码分割 const ProductPage () > import(/* webpackChunkName: "product" */ ./ProductPage.vue); // 交互驱动加载 document.querySelector(#char…...

04-jenkins学习之旅-java后端项目部署实践
1、创建被管理项目 2、构建流程说明 jenkins其实就是将服务部署拆分成了: 1、拉取代码(git) 2、打包编译 3、自定义脚本(jar复制、执行启动脚本) 4、部署成功后的一些通知等 3、demo配置 3.1、General 3.2 源码管理 添加用户名密码方式如下图 3.2.1 常见错误(r…...

基于Python flask 的豆瓣电影top250数据评分可视化
文章目录 基于Python flask 的豆瓣电影top250数据评分可视化项目简介项目结构效果展示源码获取 基于Python flask 的豆瓣电影top250数据评分可视化 博主介绍:✌安替-AnTi:CSDN博客专家、掘金/华为云//InfoQ等平台优质作者,硕士研究生毕业。专…...

Cat.4+WiFi6工业路由器介绍小体积大作用ER4200
ER42004G Cat.4WiFi6 工业路由器隶属于纵横智控ER系列,型号为ER4200,是一款坚固耐用、性能强大的网络设备,专为应对严苛环境而设计。它采用工业级品质设计,集成 4G Cat.4 全网络支持和 WiFi6 技术,可在稳定性和性能至关…...
大模型应用开发第三讲:大模型是Agent的“大脑”,提供通用推理能力(如GPT-4、Claude 3)
大模型应用开发第三讲:大模型是Agent的“大脑”,提供通用推理能力(如GPT-4、Claude 3) 资料取自《大模型应用开发:动手做AI Agent 》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的…...

创建型模式之Abstract Factory(抽象工厂)
创建型模式之Abstract Factory(抽象工厂) 摘要: 本文介绍了抽象工厂模式(Abstract Factory),它是一种创建型设计模式,提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示…...