HarmonyOS7 页面切换动画:自己手搓一个 Tab 过渡效果
📅 2026/7/24 21:10:22
👁️ 次浏览
文章目录前言为什么不用原生 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 切换效果有特殊要求不妨试试这个方案。代码量不大但能满足大部分定制化需求。
FigmaCN:3分钟实现Figma全界面汉化,设计师效率提升秘籍 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN
你是否曾因为Figma的英文界面而感到困扰?那些…
📅 2026/7/24 21:10:22
LinkSwift:九大网盘直链解析的终极技术实现指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…
📅 2026/7/24 21:09:22
FigmaCN中文翻译插件:3分钟让Figma界面全中文化,设计师工作效率提升50%以上 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN
还在为Figma的全英文界面而烦恼吗&am…
📅 2026/7/24 21:09:22
说实话,以前我也觉得咖啡就是提神饮料,直到我真正开始研究烘焙,才发现这里面水深得离谱。市面上那些花里胡哨的营销词,什么“极地冰萃”、“月光白”,听着玄乎,其实很多都是噱头。今天咱们不聊虚的,就聊聊我在接触 geo 吉意欧 这个牌子时,踩过的坑和总结出的干货。如果…
📅 2026/7/25 0:58:17
摘要:在算力资源高度垄断与资本投入呈指数级增长的全球AI竞赛中,DeepSeek(深度求索)的异军突起提供了一个独特的观察样本。本文提出“克制战略”(Strategy of Restraint)这一核心逻辑,认为在人工…
📅 2026/7/25 0:58:33
剑网3智能机器人:5分钟快速搭建的全能游戏助手 【免费下载链接】mini_jx3_bot 女生自用剑网三机器人 项目地址: https://gitcode.com/gh_mirrors/mi/mini_jx3_bot
在剑网3的武侠世界中,你是否曾为繁琐的游戏数据查询而烦恼?是否希望有…
📅 2026/7/25 0:58:33
Nintendo Switch大气层系统:从零开始的安全破解指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable
想要安全地解锁你的Nintendo Switch全部潜能吗?大气层系统&…
📅 2026/7/25 0:58:33
重塑桌面生态:用DyberPet解锁个性化桌面宠物新体验 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet
在数字化工作日益普及的今天,单调的桌面环境常常让人感…
📅 2026/7/25 0:58:33
终极跨平台模组解决方案:WorkshopDL让非Steam游戏也能畅享创意工坊资源 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL
还在为GOG、Epic Games Store等非Steam平台的…
📅 2026/7/25 0:58:33
1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…
📅 2026/7/25 0:00:17
1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…
📅 2026/7/25 0:00:17
一、直达船员,预警链路最短营运船舶强制标配 VHF 船载电台,属于驾驶室常态化值守设备;预警语音直接传递至驾驶人员,区别于岸上声光报警(船员经常听不到)、短信 / 小程序(船员极少主动查看&#…
📅 2026/7/25 0:00:17
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/24 1:07:52
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/24 1:07:52
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/24 1:07:52
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/24 7:08:08
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/24 17:08:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/24 5:08:03