HarmonyOS7 页面切换动画:自己手搓一个 Tab 过渡效果
文章目录前言为什么不用原生 Tabs核心实现状态定义Tab 栏的实现内容区域滑动方向的判断优化建议写在最后前言ArkUI 自带的Tabs组件切换页面时是有默认过渡效果的但有时候设计师给的方案比较特殊默认的Tabs满足不了需求。这时候就得自己实现页面切换动画了。今天这个案例模拟了一个 Tab 页面切换效果——顶部有四个 Tab 标签点击不同的 Tab下方内容区域会有滑动 淡入的过渡效果。为什么不用原生 Tabs说实话原生Tabs组件能覆盖 80% 的场景。但它有几个局限切换动画的自定义程度有限不支持复杂的过渡组合比如滑动 淡入 缩放同时进行Tab 指示器的样式不够灵活当设计稿要求高度定制化的 Tab 切换效果时自己写一个反而更省心。核心实现状态定义EntryComponentstruct PageSwitchAnimation{StatecurrentPage:number0StateslideOffset:number0StatefadeIn:booleantrueprivatepages:string[][首页,消息,发现,我的]build(){Column(){// ...}}}三个状态变量各司其职currentPage当前选中的 Tab 索引slideOffset内容区域的水平偏移量fadeIn控制内容区域的透明度Tab 栏的实现Row(){ForEach(this.pages,(page:string,idx:number){Text(page).fontSize(14).fontColor(idxthis.currentPage?#4D96FF:#999999).fontWeight(idxthis.currentPage?FontWeight.Bold:FontWeight.Normal).layoutWeight(1).textAlign(TextAlign.Center).padding({top:8,bottom:8}).border({width:{bottom:idxthis.currentPage?2:0},color:#4D96FF}).onClick((){constdirectionidxthis.currentPage?1:-1this.slideOffsetdirection*100this.fadeInfalseanimateTo({duration:300,curve:Curve.EaseInOut},(){this.slideOffset0this.fadeIntruethis.currentPageidx})})})}.width(100%)Tab 栏的关键在于点击事件处理。来看这段逻辑constdirectionidxthis.currentPage?1:-1this.slideOffsetdirection*100this.fadeInfalseanimateTo({duration:300,curve:Curve.EaseInOut},(){this.slideOffset0this.fadeIntruethis.currentPageidx})先判断方向——如果点击的 Tab 在右边内容从右往左滑direction 1反之从左往右滑瞬间把内容偏移到起始位置不带动画同时设为透明在animateTo里把偏移量归零、透明度恢复同时更新当前页码内容区域Column(){Column().width(100%).height(160).backgroundColor(PRESET_COLORS[this.currentPage].value).borderRadius(16).opacity(this.fadeIn?1:0).translate({x:this.slideOffset}).animation({duration:350,curve:Curve.EaseInOut})Text(当前页面:${this.pages[this.currentPage]}).fontSize(18).fontWeight(FontWeight.Bold).margin({top:16})Text(页面切换支持滑动和淡入淡出过渡).fontSize(12).fontColor(#999999).margin({top:4})}内容区域同时绑定了opacity和translate实现滑动 淡入的组合效果。滑动方向的判断这是整个案例里最有意思的部分。用一个简单的比较就能确定滑动方向constdirectionidxthis.currentPage?1:-1操作directionslideOffset视觉效果点击右侧 Tab1100内容从右侧滑入点击左侧 Tab-1-100内容从左侧滑入点击当前 Tab不变0无动画这个逻辑模拟了原生Tabs的滑动方向判断但给了我们完全的控制权。优化建议加上手势滑动切换如果想更贴近原生体验可以给内容区域加上PanGesture根据滑动距离和速度判断切换方向。缓存页面内容当前方案每次切换都会重新渲染内容区域。如果页面内容比较重比如包含列表可以用visibility配合if来缓存页面。添加滑动指示器动画Tab 栏下方的指示线也可以做滑动动画让指示器跟着用户点击的位置平滑移动。写在最后自己实现页面切换动画核心就是两步判断方向 → 设置偏移量 →animateTo过渡。虽然比不上原生Tabs的丝滑但胜在灵活可控。如果你的项目里 Tab 切换效果有特殊要求不妨试试这个方案。代码量不大但能满足大部分定制化需求。

相关新闻

LinkSwift:九大网盘直链解析的终极技术实现指南

LinkSwift:九大网盘直链解析的终极技术实现指南

LinkSwift:九大网盘直链解析的终极技术实现指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…

2026/7/24 21:09:17 阅读更多 →
FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上

FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上

FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的全英文界面而烦恼吗&am…

2026/7/24 21:09:17 阅读更多 →
每日关注:2026年7月24日 GitHub Copilot、Kerberos RC4、NemoClaw 与 NAND Flash 7 条技术动态

每日关注:2026年7月24日 GitHub Copilot、Kerberos RC4、NemoClaw 与 NAND Flash 7 条技术动态

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/7/24 21:09:17 阅读更多 →

最新新闻

好用的离子风机联网实时监控软件

好用的离子风机联网实时监控软件

在电子制造、半导体、精密仪器及新能源等领域的生产过程中,静电放电(ESD)控制是保障产品良率和设备安全的重要环节。离子风机作为最常见的静电消除设备,其运行状态直接影响ESD防护效果。然而,传统人工巡检方式存在数据…

2026/7/24 21:17:19 阅读更多 →
ROS1的痛点——为什么行业必须迁移到ROS2

ROS1的痛点——为什么行业必须迁移到ROS2

上一篇讲了ROS的历史,这篇深入聊聊ROS1到底有哪些问题,以及为什么这些问题在工业场景下是致命的。 面试的时候这个问题很常见:"ROS1有什么缺点?ROS2是怎么解决的?"如果你只能回答"ROS1有master节点是单…

2026/7/24 21:17:19 阅读更多 →
ROS的前世今生——从ROS1到ROS2的进化逻辑

ROS的前世今生——从ROS1到ROS2的进化逻辑

面试的时候被问:"你知道ROS吗?"我说知道。"那ROS和ROS2有什么区别?"我说"ROS2是升级版"。面试官笑了笑,没再追问。 后来才知道,这个问题考的不是你背没背过版本差异,而是看…

2026/7/24 21:17:19 阅读更多 →
CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

上篇聊了clang-tidy、cppcheck这些代码质量工具,最后提到要把它们串进CI流水线。今天就把CI/CD这件事展开讲透。 面试的时候被问:"你们代码提交之后,怎么保证编译通过、测试能跑?" 我当时说"本地跑一遍&#xff…

2026/7/24 21:17:19 阅读更多 →
代码质量工具——clang-tidy/cppcheck和机器人代码规范

代码质量工具——clang-tidy/cppcheck和机器人代码规范

面试的时候被问:"你们团队怎么保证代码质量?" 我当时说了句"靠code review"。面试官点点头,又问:"除了人工review,有没有用什么自动化工具?"我又卡了。 后来进了一个正规团…

2026/7/24 21:17:19 阅读更多 →
格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

本文将围绕格鲁吉亚名义雇主的雇佣方式展开讨论、重点阐述其如何推动企业的全球扩展。名义雇主成为一种灵活的雇佣模式、能够帮助企业快速适应新等市场环境,规避合规风险。通过与当地名义雇主合作,如万领钧Knit People,企业可以简化招聘过程、…

2026/7/24 21:16:19 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻