首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

HarmonyOS鸿蒙开发实战( Beta5.0)页面加载效果实现详解实践案例

  • 25-03-03 06:42
  • 4338
  • 9200
blog.csdn.net

鸿蒙HarmonyOS开发实战往期必看文章:(持续更新......)

HarmonyOS NEXT应用开发性能实践总结(持续更新......)

HarmonyOS NEXT应用开发案例实践总结合集(持续更新......)

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)


介绍

本示例介绍Stack堆叠组件和LoadingProgress加载组件模拟首次进入页面实现页面加载的效果。加载完成后,LoadingProgress组件会消失并展示加载结果页(即商品页)。

效果图预览

使用说明

  1. 进入页面开始加载,加载完成后显示整个界面。

实现思路

  1. 为了实现在页面初次加载时即展现出加载提示效果,预先定义了一个布尔类型的变量isLoading,并将其初始值设定为true。在页面加载初期,这一变量状态将触发加载页的显现,传达数据正在加载的即时信息。
  1. build() {
  2. Stack() {
  3. if (this.isLoading) {
  4. // 加载页
  5. LoadingHUD();
  6. } else {
  7. // 商品页
  8. CommodityList();
  9. }
  10. }
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor(Color.White)
  14. }
  1. 为了模拟真实的网络加载情景,设置了5秒的延迟加载机制。在页面初次加载后的5秒钟内,isLoading变量保持为true,保持加载页的展示。当5秒时限到达时,将isLoading变量的值更新为false,代表加载状态的loadingHUD将会消失,真正的加载结果CommodityList商品列表页面便会呈现出来。
  1. aboutToAppear(): void {
  2. // 模拟网络请求操作,请求网络3秒后得到数据,通知组件,变更列表数据
  3. setTimeout(() => {
  4. this.isLoading = false;
  5. }, MILLISECONDS);
  6. }
  1. CommodityList商品列表页面采用RelativeContainer相对布局组件,容器内子组件区分水平方向,垂直方向,子组件可以将容器或者其他子组件设为锚点。
  1. RelativeContainer() {
  2. // 商品图片
  3. Image(item.uri)
  4. ...
  5. .alignRules({
  6. top: { anchor: "__container__", align: VerticalAlign.Top },
  7. left: { anchor: "__container__", align: HorizontalAlign.Start }
  8. })
  9. .id('image')
  10. // 保价标签
  11. Text(item.insurance)
  12. ...
  13. .alignRules({
  14. right: { anchor: "__container__", align: HorizontalAlign.End },
  15. center: { anchor: "__container__", align: VerticalAlign.Center }
  16. })
  17. .id('insurance')
  18. // 浏览量
  19. Row() {
  20. Image($r('app.media.page_loading_views'))
  21. ...
  22. Text(item.views)
  23. ...
  24. }
  25. .alignRules({
  26. middle: { anchor: "insurance", align: HorizontalAlign.Center },
  27. top: { anchor: "insurance", align: VerticalAlign.Bottom }
  28. })
  29. .id('views')
  30. // 标题和价格标签
  31. Column() {
  32. Text(item.title)
  33. ...
  34. Text(item.price)
  35. ...
  36. }
  37. .alignRules({
  38. left: { anchor: "image", align: HorizontalAlign.End },
  39. right: { anchor: "insurance", align: HorizontalAlign.Start },
  40. center: { anchor: "image", align: VerticalAlign.Center }
  41. })
  42. .id('column')
  43. }

高性能知识点

本示例使用了LazyForEach进行数据懒加载,LazyForEach懒加载可以通过设置cachedCount属性来指定缓存数量,同时搭配组件复用能力以达到性能最优效果。

工程结构&模块类型

  1. pageloading // har类型
  2. |---mock
  3. | |---CommodityMock.ets // 本地数据源
  4. |---model
  5. | |---CommodityDataModel.ets // 数据类型定义
  6. | |---CommodityDataSource.ets // 列表数据模型
  7. |---view
  8. | |---CommodityList.ets // 商品列表自定义组件
  9. | |---LoadingHUD.ets // 加载自定义组件
  10. | |---PageLoading.ets // 主页面

模块依赖

本实例依赖common模块来实现资源的调用以及路由模块来注册路由。

鸿蒙NEXT全套学习资料
微信名片
注:本文转载自blog.csdn.net的让开,我要吃人了的文章"https://blog.csdn.net/weixin_55362248/article/details/142560293"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top