97.HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计
1. 跑马灯组件概述
跑马灯(Marquee)是一种常见的UI组件,主要用于在有限的空间内展示超出显示区域的文本内容。当文本内容过长无法在固定宽度内完整显示时,跑马灯组件会使文本自动滚动,以便用户可以查看全部内容。在HarmonyOS NEXT中,跑马灯组件被广泛应用于消息通知、公告栏等场景。
1.1 应用场景
| 场景 | 描述 | 优势 |
|---|---|---|
| 消息通知 | 展示系统或应用的通知消息 | 节省空间,吸引用户注意 |
| 公告栏 | 展示重要公告或活动信息 | 内容可循环播放,不遗漏信息 |
| 票务信息 | 展示车票、机票等检票口信息 | 动态效果明显,易于识别 |
| 商品促销 | 展示促销信息或折扣活动 | 增强视觉吸引力 |
1.2 基本功能
跑马灯组件的核心功能是实现文本的自动滚动,具体包括:
- 文本滚动:当文本宽度超过显示区域时,自动进行水平滚动
- 循环播放:支持设置滚动次数,可以无限循环或指定次数
- 滚动方向:支持从左到右或从右到左滚动
- 滚动速度:可调整滚动速度和动画持续时间
- 滚动间隔:每次滚动完成后可设置停顿时间
2. 组件架构设计
2.1 整体架构
跑马灯组件采用了模块化的设计思想,将功能划分为多个模块,每个模块负责不同的功能。整体架构如下:
跑马灯组件
├── 组件层(Component)
│ ├── MarqueeViewComponent - 跑马灯视图组件
│ └── MarqueeSection - 跑马灯核心实现组件
├── 模型层(Model)
│ ├── DataType - 数据类型定义
│ ├── Constants - 常量定义
│ └── DataSource - 数据源实现
└── 工具层(Utils)└── Logger - 日志工具
2.2 核心文件说明
| 文件名 | 路径 | 功能描述 |
|---|---|---|
| MarqueeDemo.ets | pages/StudyHo/ | 跑马灯组件使用入口 |
| Marquee.ets | components/Marquee/ | 跑马灯视图组件定义 |
| MarqueeSection.ets | utils/marquee/ | 跑马灯核心实现 |
| DataType.ets | model/marquee/ | 数据类型和配置选项定义 |
| Constants.ets | model/marquee/ | 常量定义 |
| DataSource.ets | model/marquee/ | 数据源实现 |
| Logger.ets | utils/marquee/ | 日志工具 |
3. 组件使用方式
3.1 基本使用
跑马灯组件的使用非常简单,只需要在页面中引入并使用即可:
// MarqueeDemo.ets
import { MarqueeViewComponent } from "../../components/Marquee/Marquee";
@Entry
@Component
struct MarqueeDemo {build() {RelativeContainer() {MarqueeViewComponent()}.height('100%').width('100%')}
}
这段代码展示了跑马灯组件的基本使用方式:
- 首先导入
MarqueeViewComponent组件 - 在页面的
build方法中使用RelativeContainer作为容器 - 在容器中添加
MarqueeViewComponent组件 - 设置容器的宽高为100%,使其填满整个页面
3.2 自定义配置
跑马灯组件支持多种自定义配置,可以通过传入不同的参数来实现:
// 自定义跑马灯动画属性
MarqueeSection({marqueeTextBuilder: () => {this.marqueeTextBuilder(this.tripDataItem.ticketEntrance)},marqueeAnimationModifier: new MarqueeAnimationModifier(-1, // 无限循环5000, // 动画持续时间5秒1.5, // 动画速度1.5倍PlayMode.Normal, // 从左到右滚动2000 // 停顿时间2秒),marqueeScrollModifier: new MarqueeScrollModifier('30%', // 滚动区域宽度为30%80 // 文本间隔80像素)
})
4. 组件实现原理
4.1 基本原理
跑马灯组件的实现原理主要基于以下几点:
- 文本宽度检测:通过
onAreaChange事件获取文本实际宽度和滚动区域宽度 - 条件判断:当文本宽度大于滚动区域宽度时,才启动滚动动画
- 动画实现:使用
animateTo方法实现文本的平滑滚动 - 循环控制:通过计数器和定时器控制动画的循环次数和间隔时间
4.2 关键代码分析
// MarqueeSection.ets中的核心实现
scrollAnimation() {// 文本宽度小于Scroll组件宽度,不执行滚动操作if (this.ticketCheckTextWidth < this.ticketCheckScrollWidth) {return;}animateTo({duration: this.marqueeAnimationModifier.duration,tempo: this.marqueeAnimationModifier.tempo,curve: Curve.Linear,onFinish: () => {// 动画完成后的处理...// 使用定时器实现停顿效果this.timer = setTimeout(() => {this.scrollAnimation();}, this.marqueeAnimationModifier.delayTime)}}, () => {// 设置文本偏移量,实现滚动效果this.ticketCheckTextOffset = this.marqueeAnimationModifier.playMode === PlayMode.Normal ?-(this.ticketCheckTextWidth + this.marqueeScrollModifier.space) :-(this.ticketCheckTextWidth - this.ticketCheckScrollWidth)})
}
5. 总结
本文介绍了HarmonyOS NEXT跑马灯组件的基础概念和架构设计,包括组件的应用场景、基本功能、整体架构、使用方式和实现原理。通过本文的学习,读者可以了解跑马灯组件的基本结构和工作原理,为后续深入学习组件的具体实现打下基础。
在下一篇教程中,我们将深入探讨跑马灯组件的核心实现——MarqueeSection组件,详细分析其属性、方法和实现细节。
相关文章:
97.HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:基础概念与架构设计 1. 跑马灯组件概述 跑马灯(Marquee)是一种常见的UI组件&a…...
81.HarmonyOS NEXT 状态管理与响应式编程:@Observed深度解析
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 状态管理与响应式编程:Observed深度解析 文章目录 HarmonyOS NEXT 状态管理与响应式编程:Observed深度解析…...
【Agent】OpenManus-Agent架构详细分析
各组件详细设计见: BaseAgent:BaseAgentReActAgent:ReActAgentToolCallAgent:ToolCallAgent具体Agent实现:具体AgentMemory数据结构:Memory 1. 智能体层次结构 OpenManus 采用了一个多层次的智能体继承结…...
股指期货有卖不出去的时候吗?
在股指期货的交易世界里,很多人都有这样的疑问:股指期货会不会有卖不出去的时候呢?答案是会的,下面咱们就来详细唠唠为啥会出现这种情况。 市场极端行情下难以卖出 1.跌停限制:股指期货和股票一样,也有涨…...
前端Html5 Canvas面试题及参考答案
目录 Canvas 元素的默认尺寸是多少?如何正确设置其宽高以避免图像拉伸? 如何获取 Canvas 的 2D 上下文对象?3D 上下文支持哪些技术? canvas.width 与 canvas.style.width 的区别是什么? Canvas 支持的图像格式有哪些?如何将 Canvas 转换为 Base64 图片? Canvas 中如…...
【ES6】03-Set + Map
本文介绍两种集合 set map 的操作和方法。 目录 1. Set 1.1 set基本使用 1.2 add 1.3 delete 1.4 has 1.5 size 1.6 set转换为数组 1.7 拓展运算符 1.8 for...of 1.9 forEach 1.10 set给数组去重 2. Map 2.1 创建map集合 2.2 set添加元素 2.3 delete删除元素 …...
Java缓存String(字符串常量池)、Integer (-128 到 127 )
对问题的解释 1. “字符串常量池存储的是string对象的直接引用,而不是直接存放的对象,是一张string table” 的含义 这句话可以从以下几个方面理解: (1) 字符串常量池的存储内容 直接引用:字符串常量池中存储的是指向实际 Stri…...
消息队列的特性与使用场景:Kafka、ActiveMQ、RabbitMQ与RocketMQ的深度剖析
在分布式系统和微服务架构中,消息队列是实现服务间通信和解耦的核心组件。Kafka、ActiveMQ、RabbitMQ和RocketMQ是当前最受欢迎的消息队列解决方案,它们各自具有独特的特性和适用场景。本文将从特性和使用场景两个维度进行对比分析,帮助读者更…...
开发、科研、日常办公工具汇总(自用,持续更新)
主要记录汇总一下自己平常会用到的网站工具,方便查阅。 update:2025/2/11(开发网站补一下) update:2025/2/21(补充一些AI工具,刚好在做AI视频相关工作) update:2025/3/7&…...
解决VueI18n使用浏览器插件翻译后,切换国际化失效的问题
问题复现 在使用Vue-i18n对页面进行国际化的时候,使用浏览器翻译插件(如腾讯翻译)后,切换国际化语言,随后当我们关闭浏览器翻译插件后,再次切换国际化语言,原来被翻译的文字无法正确切换 出现…...
HTML5 drag API实现列表拖拽排序
拖拽API(Drag and Drop API)是HTML5提供的一组功能,使得在网页上实现拖放操作变得更加简单和强大。这个API允许开发者为网页元素添加拖拽功能,用户可以通过鼠标将元素拖动并放置到指定的目标区域。 事件类型 dragstart࿱…...
改变一生的思维模型【11】升维
升维思维模型:突破认知局限的破局法则 一、定义与核心逻辑 升维思维是通过增加分析维度,将问题投射到更高认知层次寻找解决方案的思考方式。其本质是跳出原有竞争维度,在更广阔的空间重构游戏规则。核心逻辑在于:当低维战场陷入…...
【动手学深度学习】#2线性神经网络
主要参考学习资料: 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 2.1 线性回归2.1.1 线性回归的基本元素线性模型损失函数解析解随机梯度下降 2.1.3 最大似然估计 2.2 线性回归从零开始实现2.2.1 生成数据集2.2.2 读取数…...
计算机网络——NAT
一、什么是NAT? NAT(Network Address Translation,网络地址转换) 是一种将 私有IP地址 与 公有IP地址 相互映射的技术,主要用于解决IPv4地址不足的问题。它像一名“翻译官”,在数据包经过路由器或防火墙时…...
Stable Deffusion--常见模型插件详解
1.Checkpoint大模型 Checkpoint 是生成图像的基础模型,决定了整体画风如动漫、写实、机甲等。它是必选项,所有图像生成必须基于一个主模型。文件体积较大通常 1.5GB 以上,格式为 .ckpt 或 .safetensors。 存放位置为:\models\Sta…...
防重复提交详解:从前端Vue到后端Java的全面解决方案
防重复提交详解:从前端Vue到后端Java的全面解决方案 一、重复提交问题概述 在Web应用开发中,表单重复提交是一个常见问题,可能导致: 数据库中出现重复记录重复执行业务逻辑(如多次扣款)系统资源浪费用户…...
同一子网通信
添加交换机后的通信流程 1. 同一子网内(使用交换机) 判断是否在同一子网: 主机A通过子网掩码判断主机B的IP地址是否属于同一子网。若在同一子网,主机A需要通过ARP获取主机B的MAC地址。 ARP请求(广播)&…...
快速迭代:利用 nodemon 和其他工具实现 Express.js 热更新
在开发 Express.js 应用时,热更新(Hot Reloading)可以显著提升开发效率,因为它允许你在修改代码后立即看到效果,而无需手动重启服务器。以下是几种实现热更新的方法和工具,帮助你在开发过程中更高效地工作。…...
BUG日志:Maven项目启动报错(文件名或者文件扩展名过长)
Bug日志编号:[Maven-001] 标题:Windows系统下Maven项目因路径过长导致命令行执行失败 1. 问题描述 现象:执行mvn clean install时报错: The input line is too long 或 The filename or extension is too long触发条件…...
IntelliJ IDEA 快捷键系列:重命名快捷键详解
目录 引言一、默认重命名快捷键1. Windows 系统2. Mac 系统 二、操作步骤与技巧1. 精准选择重命名范围2. 智能过滤无关内容 三、总结 引言 在代码重构中,重命名变量、类、方法 是最常用的操作之一。正确使用快捷键可以极大提升开发效率。本文针对 Ma…...
零基础掌握分布式ID生成:从理论到实战的完整指南 [特殊字符]
一、为什么需要分布式ID? 🤔 在单机系统中,使用数据库自增ID就能满足需求。但在分布式系统中,多个服务节点同时生成ID时会出现以下问题: ID冲突:不同节点生成相同ID 扩展困难:数据库自增ID无法…...
使用python反射,实现pytest读取yaml并发送请求
pytest yaml yaml - feature: 用户模块story: 登录title: 添加用户request:method: POSTurl: /system/user/listheaders: nullparams: nullvalidate: nullread_yaml_all def read_yaml_all(path):with open(path, r, encodingutf-8) as f:value yaml.safe_load(f)return v…...
点灯、点各式各样的灯
鱼离水则身枯,心离书则神索。 前言闪灯呼吸灯流水灯二进制数显示灯蜂鸣器节拍流水音乐会总结 前言 上回书咱们简单了解了一点有关特殊功能寄存器sfr、通用输入输出GPIO、位操作运算符sbit和一个不靠单片机上的晶振(拿来定时的)的依托于单片机CPU空操作的ms级延时函…...
Matlab 汽车悬架系统动力学建模与仿真
1、内容简介 略 Matlab 170-汽车悬架系统动力学建模与仿真 可以交流、咨询、答疑 2、内容说明 略 本文对题目给定的1/2汽车四自由度模型,建立状态空间模型进行系统分析,并通过MATLAB仿真对系统进行稳定性、可控可观测性分析,对得的结果进行…...
专访数势科技谭李:智能分析 Agent 打通数据平权的最后一公里
作者|斗斗 编辑|皮爷 出品|产业家 伦敦塔桥下的泰晤士河底,埋藏着工业革命的隐秘图腾——布鲁内尔设计的隧道盾构机。在19世纪城市地下轨道建设的过程中,这个直径11米的钢铁巨兽没有选择拓宽河道,而是开创了地下通行的新维度。 “我们不…...
了解浏览器
本文来自腾讯元宝 Chrome浏览器(Google Chrome)是由Google开发的一款免费网页浏览器,自2008年发布以来凭借其高效、安全、简洁的特点成为全球市场份额最高的浏览器。以下是其核心信息及最新动态的综合分析: 一、核心优势与技术特点…...
2、操作系统之软件基础
一、硬件支持系统 ,系统管理硬件 操作系统核心功能可以分为: 守护者:对硬件和软件资源的管理协调者:通过机制,将各种各样的硬件资源适配给软件使用。 所以为了更好的管理硬件,操作系统引进了软件。其中3大…...
STC89C52单片机学习——第20节: [8-2]串口向电脑发送数据电脑通过串口控制LED
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.15 51单片机学习——第20节: [8-2]串口向电脑发送数据&电脑通过串口控制LED 前言…...
K8S下nodelocaldns crash问题导致域名请求响应缓慢
前言 最近做项目,有业务出现偶发的部署导致响应很慢的情况,据了解,业务使用域名访问,相同的nginx代理,唯一的区别就是K8S重新部署了。那么问题大概率出现在容器平台,毕竟业务是重启几次正常,偶…...
CVPR2024 | TT3D | 物理世界中可迁移目标性 3D 对抗攻击
Towards Transferable Targeted 3D Adversarial Attack in the Physical World 速览总结摘要-Abstract引言-Introduction相关工作-Related Work方法-MethodologyPreliminray-预备知识问题表述-Problem FormulationNeRF参数空间中的双重优化-Dual Optimization in NeRF Paramete…...
