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

鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp

UniApp 制作个性化的评分星级组件

在移动应用开发中,评分星级组件(Rating Star)是用户交互和反馈的重要工具,广泛应用于电商、外卖、内容社区等场景。一个美观、易用、可定制的评分组件,不仅能提升用户体验,还能增强产品的互动性。随着 HarmonyOS(鸿蒙)生态的不断壮大,如何用 UniApp 实现一个兼容鸿蒙的个性化评分星级组件,成为许多开发者关注的话题。本文将结合实际项目经验,详细讲解如何用 UniApp 制作一个灵活、可扩展、适配鸿蒙的评分星级组件。

为什么要自定义评分星级组件?

虽然市面上有一些现成的评分组件,但在实际项目中,往往会遇到如下需求:

  • 支持半星、整星、可自定义星星数量;
  • 支持自定义星星图标、颜色、大小、动画效果;
  • 兼容多端,尤其是 HarmonyOS 设备的适配和体验优化;
  • 支持只读、可编辑、带提示文字等多种模式。

自定义组件不仅能满足个性化需求,还能提升整体产品体验。

组件设计思路

设计一个评分星级组件,需要考虑以下几个方面:

  1. 星星数量与分值:支持自定义星星数量、当前分值、最小步长(如半星)。
  2. 交互体验:支持点击、滑动选择分数,动画反馈。
  3. 样式定制:支持自定义图标、颜色、大小、间距等。
  4. 鸿蒙适配:在鸿蒙端保证手势、动画、图标渲染等能力正常。
  5. 易用性与扩展性: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 项目提供实用参考。


如有问题或更好的实现思路,欢迎留言交流!

http://www.xdnf.cn/news/652087.html

相关文章:

  • 力扣刷题Day 56:岛屿数量(200)
  • 多线程(5)——单例模式,阻塞队列
  • C++多态与虚函数
  • UR10e 机器人如何通过扭矩控制接口实现高效装配
  • window 显示驱动开发-呈现开销改进
  • 如何在 Django 中集成 MCP Server
  • Leetcode 3556. Sum of Largest Prime Substrings
  • TPAMI 2025 | CEM:使用因果效应图解释底层视觉模型
  • Hive 分区详解:从基础概念到实战应用
  • R 语言科研绘图 --- 热力图-汇总
  • Linux系统:动静态库的制作与安装
  • ollama list模型列表获取 接口代码
  • Python环境搭建
  • 220Vac 1kW 无刷直流电机驱动器硬件方案
  • Spring AI 之多模态
  • [BUG]Debian/Linux操作系统中 安装 curl等软件显示无候选安装(E: 软件包 curl 没有可安装候选)
  • 国芯思辰| SerDes芯片SCS5501/SCS5502助力汽车触屏流媒体后视镜,兼容MAX9295A/MAX96717
  • Oracle 的 TX、TM、UL 锁对比
  • 【后端高阶面经:MongoDB篇】40、怎么优化MongoDB的查询性能?
  • 001 dart刷题
  • QT6.9中opencv引用路径的其中一种设置
  • AlphaCore GPU 物理仿真引擎内测邀请
  • crc32代码设计
  • .NET 8使用AOT发布ASP.NET Core应用
  • 《软件工程》第 7 章 - 软件体系结构设计
  • Wan2.1 图生视频 多卡推理批量生成视频
  • 在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)
  • Cocos Creator 之 Label的实际宽高改变文本背景大小及常用方法
  • 【Volumetric Heatmap热力图插件的使用】
  • SpringBoot性能优化的12招