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

鸿蒙OSUniApp 开发带有通知提示的功能组件#三方框架 #Uniapp

使用 UniApp 开发带有通知提示的功能组件

在移动应用开发中,通知提示(Notification/Toast/Alert)是提升用户体验和交互效率的重要手段。无论是表单校验、操作反馈、系统消息还是营销推送,合理的通知提示都能帮助用户及时获取关键信息。随着 HarmonyOS(鸿蒙)生态的不断壮大,开发一套兼容鸿蒙的通知提示功能组件变得尤为重要。本文将结合 UniApp 跨平台开发的优势,详细讲解如何实现一个高效、易扩展、适配鸿蒙的通知提示组件,并分享实际案例和鸿蒙适配经验。

为什么要自定义通知提示组件?

虽然 UniApp 内置了 uni.showToastuni.showModal 等基础能力,但在实际项目中,往往会遇到如下需求:

  • 支持多种类型(成功、警告、错误、信息等)和自定义样式;
  • 支持全局调用、队列展示、自动消失、手动关闭等高级功能;
  • 兼容多端,尤其是 HarmonyOS 设备的适配和体验优化;
  • 支持插入图片、按钮、富文本等内容。

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

组件设计思路

设计一个通知提示组件,需要考虑以下几个方面:

  1. 类型与样式:支持多种通知类型和自定义颜色、图标、动画。
  2. 展示与消失:支持自动消失、手动关闭、队列管理。
  3. 全局调用:通过事件总线或全局挂载,方便业务随时调用。
  4. 鸿蒙适配:在鸿蒙端保证动画、手势、系统通知等能力正常。
  5. 易用性与扩展性:props 设计合理,便于业务集成和后续扩展。

组件实现

我们以一个通用的 Notify 组件为例,支持多类型、自动消失、全局调用。

1. 组件结构

components/notify/notify.vue 下新建组件:

<template><view v-if="visible" class="notify" :class="type" :style="notifyStyle"><text v-if="icon" class="icon">{{ icon }}</text><text class="message">{{ message }}</text><text v-if="closable" class="close-btn" @click="close">×</text></view>
</template><script>
export default {name: 'Notify',props: {message: {type: String,default: ''},type: {type: String,default: 'info' // success, warning, error, info},duration: {type: Number,default: 2000},icon: {type: String,default: ''},closable: {type: Boolean,default: false},top: {type: String,default: '100rpx'}},data() {return {visible: false,timer: null};},computed: {notifyStyle() {return {top: this.top};}},methods: {show() {this.visible = true;if (this.duration > 0) {this.timer = setTimeout(() => {this.close();}, this.duration);}},close() {this.visible = false;if (this.timer) {clearTimeout(this.timer);this.timer = null;}this.$emit('close');}},beforeDestroy() {if (this.timer) clearTimeout(this.timer);}
};
</script><style scoped>
.notify {position: fixed;left: 50%;transform: translateX(-50%);min-width: 320rpx;max-width: 80vw;padding: 24rpx 40rpx;border-radius: 16rpx;color: #fff;font-size: 32rpx;box-shadow: 0 4rpx 24rpx rgba(0,0,0,0.08);z-index: 9999;display: flex;align-items: center;animation: fadeIn 0.3s;
}
.notify.success {background: linear-gradient(90deg, #4caf50 0%, #43e97b 100%);
}
.notify.warning {background: linear-gradient(90deg, #ff9800 0%, #ffc107 100%);
}
.notify.error {background: linear-gradient(90deg, #f44336 0%, #ff6b6b 100%);
}
.notify.info {background: linear-gradient(90deg, #2196f3 0%, #6dd5fa 100%);
}
.icon {margin-right: 16rpx;font-size: 36rpx;
}
.message {flex: 1;
}
.close-btn {margin-left: 16rpx;font-size: 36rpx;color: #fff;opacity: 0.7;cursor: pointer;
}
@keyframes fadeIn {from { opacity: 0; transform: translateX(-50%) translateY(-20rpx); }to { opacity: 1; transform: translateX(-50%) translateY(0); }
}
</style>

2. 全局调用与页面集成

可以通过事件总线或 Vue.prototype.$notify 实现全局调用。这里以页面局部调用为例:

<template><view class="demo-notify"><button @click="showSuccess">成功提示</button><button @click="showError">错误提示</button><notify ref="notify" :message="notifyMsg" :type="notifyType" :icon="notifyIcon" :closable="true" /></view>
</template><script>
import Notify from '@/components/notify/notify.vue';export default {components: { Notify },data() {return {notifyMsg: '',notifyType: 'info',notifyIcon: ''};},methods: {showSuccess() {this.notifyMsg = '操作成功!';this.notifyType = 'success';this.notifyIcon = '✔';this.$refs.notify.show();},showError() {this.notifyMsg = '发生错误,请重试';this.notifyType = 'error';this.notifyIcon = '✖';this.$refs.notify.show();}}
};
</script><style scoped>
.demo-notify {padding: 40rpx;
}
button {margin-right: 24rpx;margin-bottom: 24rpx;width: 220rpx;height: 80rpx;background: #007dff;color: #fff;border: none;border-radius: 12rpx;font-size: 30rpx;
}
</style>

3. HarmonyOS 适配与优化建议

  • 动画体验:鸿蒙端对 CSS 动画支持良好,建议适当增加淡入淡出、滑动等动画。
  • 系统通知:如需推送系统级通知,可结合鸿蒙原生能力或 JSBridge 扩展。
  • 多端一致性:建议在鸿蒙、安卓、iOS等多端真机测试,确保通知样式和交互一致。
  • UI 细节:鸿蒙设备分辨率多样,建议用 vw/rpx 单位自适应。
  • 无障碍支持:为通知内容添加 aria-live 属性,提升可访问性。

4. 实际案例与体验优化

在某鸿蒙快应用项目中,通知提示组件广泛应用于表单校验、操作反馈、系统消息等场景。实际开发中还可结合以下优化:

  • 支持通知队列,多个通知依次展示;
  • 支持插入图片、按钮、富文本内容;
  • 支持顶部、底部、居中等多种展示位置;
  • 支持自定义展示时长、动画效果。

总结

基于 UniApp 的通知提示组件方案,既能兼容 HarmonyOS 生态,也能满足多端统一开发需求。通过灵活的 props 设计、全局调用和动画优化,可以为用户带来高效、友好的通知体验。希望本文能为你的鸿蒙/UniApp 项目提供实用参考。


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

相关文章:

鸿蒙OSUniApp 开发带有通知提示的功能组件#三方框架 #Uniapp

使用 UniApp 开发带有通知提示的功能组件 在移动应用开发中&#xff0c;通知提示&#xff08;Notification/Toast/Alert&#xff09;是提升用户体验和交互效率的重要手段。无论是表单校验、操作反馈、系统消息还是营销推送&#xff0c;合理的通知提示都能帮助用户及时获取关键…...

前端EXCEL插件智表ZCELL数据源功能详解

一、数据源功能介绍 前端EXCEL插件智表ZCELL提供了强大的数据源管理功能&#xff0c;使开发者能够灵活地在电子表格中集成和管理结构化数据。数据源功能主要分为两种类型&#xff1a; 卡片式数据源&#xff1a;适合展示和编辑单个数据记录 表格式数据源&#xff1a;适合处理表…...

打卡第31天:模块和库的导入

重复内容 知识点回顾&#xff1a; 1.导入官方库的三种手段 2.导入自定义库/模块的方式 3.导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 作业&#xff1a;自己新建几个不同路径文件尝试下如何导入 导入机制的核…...

LLM Coding

AI Coding 深度解析&#xff1a;探索编程新范式与未来趋势 | w3cschool笔记https://www.phodal.com/blog/ai-friendly-architecture/bmadcode/BMAD-METHOD: Breakthrough Method for Agile Ai Driven Development...

Qt 的多线程

Qt 中的多线程主要用于处理耗时操作,避免阻塞主线程(UI 线程),从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结: 常见的多线程实现方式 继承 QThread 类 :最基础的实现方式,具体步骤为继承 QThread 类,重写其 run() 函数,在 run() 函数中编写线程要…...

【请关注】各类MySQL数据备份还原分享

MySQL数据备份的全部方法 MySQL数据备份是数据库管理中的关键任务,以下是MySQL数据备份的全面方法总结: 一、逻辑备份方法 1. **mysqldump工具** - 最常用的备份工具 - 命令示例: >bash mysqldump -u [username] -p[password] [database_name] > backup.sql > -…...

Go语言方法与接收者 -《Go语言实战指南》

在 Go 中&#xff0c;方法是绑定到某个类型上的函数。与普通函数不同&#xff0c;方法具有一个“接收者&#xff08;receiver&#xff09;”&#xff0c;用于指定它是哪个类型的“方法”。 一、方法的定义语法 func (接收者名 接收者类型) 方法名(参数列表) 返回值列表 {// 方…...

基于 STM32 的农村污水处理控制系统设计与实现

摘要 针对农村污水处理自动化程度低、运维成本高的问题,本文设计了一种基于 STM32 单片机的污水处理控制系统。系统通过多传感器实时监测水质参数,结合 PID 控制算法实现污水处理全流程自动化,并集成远程监控功能,满足农村地区低成本、易维护的需求。 一、硬件系统设计 …...

【Linux】进程 信号的产生

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、掌握Linux信号的基本概念 &#x1f320;前台进程 VS 后台进程 &#x1f320; 小贴士&#xff1a; &#x1fa84;⼀个系统函数 --- signal() &#x1fa84;查看信号 --- man 7 sign…...

实时操作系统革命:实时Linux驱动的智能时代底层重构

一、智能时代对实时性的终极挑战 在万物互联的智能时代&#xff0c;人类对机器响应速度的期待已突破物理极限。当工业机器人以亚毫米级精度执行微米级加工任务&#xff0c;当自动驾驶系统在130公里时速下需在10毫秒内完成决策切换&#xff0c;当医疗机器人需在5毫秒内响应神经…...

NGINX HTTP/3 实验指南安装、配置与调优

一、HTTP/3 简介 基于 QUIC&#xff1a;在 UDP 之上实现的多路复用传输&#xff0c;内置拥塞控制与前向纠错&#xff0c;无需三次握手即可恢复连接。零 RTT 重连&#xff1a;借助 TLS 1.3&#xff0c;实现连接恢复时的 0-RTT 数据发送&#xff08;视底层库支持&#xff09;。多…...

机器学习中的维度、过拟合、降维

1. 维度灾难 当我们谈论机器学习模型在处理数据时遇到的困难&#xff0c;一个常常被提及的词便是“维度灾难”&#xff08;Curse of Dimensionality&#xff09;。这不是科幻小说里的情节&#xff0c;而是数学和计算世界里真实存在的困境。它指的正是&#xff1a;当数据集的特…...

关于git的使用

下载git 可以去git的官网下载https://git-scm.com/downloads 也可以去找第三方的资源下载&#xff0c;下载后是一个exe应用程序&#xff0c;直接点开一直下一步就可以安装了 右键任意位置显示这两个就代表成功&#xff0c;第一个是git官方的图形化界面&#xff0c;第二个是用…...

预约按摩小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的预约按摩小程序源码&#xff0c;ThinkPHP作为后端框架&#xff0c;以其高效稳定著称&#xff0c;能妥善处理数据逻辑与业务规则。FastAdmin作为后台管理框架&#xff0c;极大简化了后台管理系统的搭建与维护。UniApp则让小程序具备跨平台…...

Elasticsearch创建快照仓库报错处理

创建快照仓库报错&#xff1a; 根据报错提示的信息&#xff0c;问题可能出在 Elasticsearch 的配置中。当你尝试创建一个文件系统&#xff08;fs&#xff09;类型的快照仓库时&#xff0c;虽然已经指定了 location 参数&#xff0c;但 Elasticsearch 仍然报错&#xff0c;这通…...

LINUX安装运行jeelowcode前端项目

参考 JeeLowCode低代码社区,JeeLowCode低代码开发平台,JeeLowCode低代码开发框架,快速启动&#xff08;VUE&#xff09; 安装node 18 LINUX安装node/nodejs_linux安装node 安装到哪-CSDN博客 安装PNPM LINUX安装PNPM-CSDN博客 下载 git clone https://gitcode.com/jeelo…...

使用DDR4控制器实现多通道数据读写(十三)

一、概述 在上一章节中使用仿真简单验证了interconnect的功能&#xff0c;使用四个axi4的主端口同时发起读写命令&#xff0c;经过interconnect后&#xff0c;将这些读写指令依次发给ddr4控制器。Ddr4控制器响应后再依次将响应发送到各个通道。从而实现多通道读写ddr4控制器的功…...

如何描述BUG

一、如何描述BUG 1.1 版本信息 1.1.1 必填项 精确到构建版本号&#xff08;如v2.3.1_build20240615&#xff09; 获取方式&#xff1a; 代码版本控制系统&#xff08;Git提交哈希值&#xff09;应用内版本信息&#xff08;App的About页面&#xff09;持续集成工具生成的版本…...

Python进阶:如何通过组合模式实现高性能Vector类?

&#x1f50d; 设计动机&#xff1a;为何抛弃继承选择组合&#xff1f; 在实现多维向量类Vector时&#xff0c;我们刻意采用组合模式而非继承&#xff0c;核心优势在于&#xff1a; 高扩展性&#xff1a;通过array数组存储分量&#xff0c;天然支持高维向量低耦合&#xff1a…...

谷歌Veo vs Sora:AI视频生成技术的巅峰对决

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从架构到实践&#xff0c;解析音画同步、物理模拟与长视频生成的破局之战 一、技术架构&#xff1a;双雄对垒&#xff0c;殊途同归&#xff1f; 谷歌…...

基于Spring boot+vue的中医养生系统的设计与实现(源码+论文+部署+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 在健康中国战略持续推进与全民健康意识显著提升的时代背景下&#xff0c;中医养生作为中…...

31.第二阶段x64游戏实战-封包-线程发包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;30.第二阶段x64游戏实战-认识网络数据包发送流程 代码跳转 ws2_32.send跳转sen…...

Unity数字人开发笔记

开源工程地址&#xff1a;https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758&#xff0c;开放这个源码 一、建立工程 建立Unity工程&#xff08;UnityAiChat&#xff09;拖入Unity-AI-Chat-Toolkit.unitypackage打开chatSample工程&#xff0c;可…...

嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突

故障现象 今天开发STM32G431时遇到一个问题&#xff0c;板子打样回来后&#xff0c;焊接完成&#xff0c;可以烧程序&#xff0c;可以读FLASH&#xff0c;却死活不能运行&#xff0c;也不能进仿真调试。 故障定位 经过排查&#xff0c;发现将隔离芯片π121M31拆除&#xff0…...

每天掌握一个Linux命令 - sqlite3

Linux 命令工具 sqlite3 使用指南 一、工具概述 sqlite3 是 SQLite 数据库的命令行工具&#xff0c;用于在 Linux 系统中直接操作 SQLite 数据库&#xff08;轻量级、无服务器、嵌入式关系型数据库&#xff09;。 核心特点&#xff1a; 无需安装数据库服务&#xff0c;直接通…...

程序环境与预处理

一、程序的翻译环境和执行环境 翻译环境&#xff1a;将源代码转化为可执行的机器指令 执行环境&#xff1a;执行代码 1、翻译环境 流程&#xff1a; 二、运行环境 程序执行过程&#xff1a; 三、预编译阶段 1、预定义符号 __FILE__ //进行编译的原文件名 __LINE__ //文…...

RT Thread Nano V4.1.1 rtconfig.h 注释 Configuration Wizard 格式

rtcomfig.h 以下是对 [rtconfig.h](file://c:\Users\admin\Downloads\rtthread-nano-master\rt-thread\bsp\stm32f407-msh\RT-Thread\rtconfig.h) 文件中每一个配置项的详细注释说明: 基本配置(Basic Configuration) [RT_THREAD_PRIORITY_MAX](file://c:\Users\admin\Downl…...

《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》

【作者简介】“琢磨先生”--资深系统架构师、985高校计算机硕士&#xff0c;长期从事大中型软件开发和技术研究&#xff0c;每天分享Java硬核知识和主流工程技术&#xff0c;欢迎点赞收藏&#xff01; 一、单例模式的核心概念与设计目标 在软件开发中&#xff0c;我们经常会遇…...

JSONP跨域原理全解析

JSONP&#xff08;JSON with Padding&#xff09;是一种绕过浏览器同源策略限制、实现跨域数据请求的“hack”式方案。其核心原理和流程如下&#xff1a; 同源策略限制 浏览器为了安全&#xff0c;只允许页面从与当前页面相同协议、域名、端口的服务器加载数据。而 <script&…...

【MySQL】第11节|MySQL 8.0 主从复制原理分析与实战(一)

一、MySQL主从复制基础 1. 核心概念 定义&#xff1a; MySQL主从复制是将主库&#xff08;Source/Master&#xff09;的数据变更同步到一个或多个从库&#xff08;Replica/Slave&#xff09;的机制&#xff0c;默认采用异步复制&#xff0c;支持全库、指定库或表的同步。 角…...