news 2026/7/31 16:04:15

鸿蒙掌上驾考宝典应用开发11:Swiper 轮播组件——从驾考题库切换看滑动容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙掌上驾考宝典应用开发11:Swiper 轮播组件——从驾考题库切换看滑动容器

第11篇:Swiper 轮播组件——从驾考题库切换看滑动容器

一、引言

Swiper 是鸿蒙 ArkUI 中用于实现轮播切换的容器组件,支持左右滑动切换页面。DriverLicenseExam 项目在科目切换场景中使用了 Swiper 组件,实现了科目一/二/三/四内容的滑动切换。本文将详细解析 Swiper 组件的使用。

二、Swiper 基本用法

2.1 科目切换的实现

在 HomeView 中,Swiper 与 Tab 联动,实现科目内容的切换:

// products/entry/src/main/ets/pages/home/HomeView.ets @ComponentV2 export struct HomeView { swiperController: SwiperController = new SwiperController(); @Local currentTab: number = 0; @Builder tab() { Row() { ForEach(KEMUTAB_LIST, (item: KEMUTabListItem, index: number) => { Column() { Text(item.label) .fontColor(this.currentTab === index ? $r('sys.color.font_primary') : $r('sys.color.font_secondary')) .fontSize(14) .fontWeight(this.currentTab === index ? FontWeight.Bold : FontWeight.Normal); if (this.currentTab === index) { Divider().color($r('sys.color.comp_divider')).strokeWidth(2); } } .onClick(() => { this.swiperController.changeIndex(index); // Tab 点击时切换 Swiper this.tabChange(index); }); }); } } build() { // ... 其他内容 Swiper(this.swiperController) { this.subjectOneAndFour() // 科目一内容 this.subjectTwoAndThree() // 科目二内容 this.subjectTwoAndThree() // 科目三内容 this.subjectOneAndFour() // 科目四内容 } .cachedCount(0) // 不缓存页面 .index(this.currentTab) // 初始化索引 .loop(false) // 禁止循环 .indicator(false) // 隐藏指示器 .onChange((targetIndex: number) => { this.currentTab = targetIndex; // 滑动时同步 Tab 状态 }); } }

2.2 Swiper 核心属性

属性说明
cachedCount0预加载页面数(0 表示不预加载)
indexnumber当前显示的页面索引
loopfalse是否循环播放
indicatorfalse是否显示导航点指示器
onChangecallback页面切换时的回调

三、Swiper 与 Tab 的联动机制

3.1 双向同步

// Tab 点击 → Swiper 切换 tab.onClick(() => { this.swiperController.changeIndex(index); this.tabChange(index); }); // Swiper 滑动 → Tab 高亮 Swiper.onChange((targetIndex: number) => { this.currentTab = targetIndex; });

3.2 SwiperController 控制

swiperController: SwiperController = new SwiperController(); // 编程式切换 swiperController.changeIndex(2); // 切换到指定索引 swiperController.showNext(); // 下一页 swiperController.showPrevious(); // 上一页 swiperController.finishAnimation(); // 立即完成当前动画

四、性能优化策略

4.1 cachedCount 的权衡

// 场景1:不缓存(适合页面内容较少的场景) Swiper() .cachedCount(0) // 只渲染当前页面 // 场景2:预缓存(适合页面内容较多的场景) Swiper() .cachedCount(2) // 预渲染前后各 2 页

4.2 内容复用

同一 Builder 函数可被多次复用,减少代码重复:

// 科目二和科目三共用相同的内容模板 Swiper(this.swiperController) { this.subjectOneAndFour() // 科目一 this.subjectTwoAndThree() // 科目二(复用) this.subjectTwoAndThree() // 科目三(复用) this.subjectOneAndFour() // 科目四 }

五、总结

Swiper 组件是实现滑动切换场景的核心容器,配合 Tab 组件可以实现常见的"Tab 切换 + 内容滑动"交互模式。合理使用 cachedCount 属性可以在性能和体验之间取得平衡。


关键源码文件:

  • products/entry/src/main/ets/pages/home/HomeView.ets— Swiper + Tab 联动
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 16:01:55

传统成套柜厂,如何靠智能化摆脱价格战?

在电力设备制造行业,传统成套柜厂正面临一场前所未有的“内卷”危机。产品同质化严重,利润空间被不断压缩,单纯依靠“拼价格、拼关系”的粗放式增长模式已难以为继。如何跳出低价竞争的泥潭,实现从“设备制造商”向“智能服务商”…

作者头像 李华
网站建设 2026/7/31 16:01:23

象棋AI连线工具终极指南:3分钟实现智能对弈分析

象棋AI连线工具终极指南:3分钟实现智能对弈分析 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 你是否曾在对弈中陷入困境,不知道下…

作者头像 李华
网站建设 2026/7/31 16:00:16

终极指南:在Windows 10上部署Android子系统的完整教程

终极指南:在Windows 10上部署Android子系统的完整教程 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 你是一个文章写手,你…

作者头像 李华
网站建设 2026/7/31 15:59:53

RedFoxHub:一站式新媒体数据平台实战指南,告别多平台爬虫维护之苦

一个平台整合20主流社交平台数据,提供近千个API端点与AI技能,单次调用最低仅需0.02。本文将从真实痛点出发,深度解析RedFoxHub如何解决多平台数据对接难题,并提供从注册到实战的完整指南。 一、痛点直击:为什么你需要R…

作者头像 李华
网站建设 2026/7/31 15:59:39

uni-app小程序大文件分片上传与断点续传实战

1. uni-app小程序大文件上传的痛点分析 在uni-app开发小程序时,文件上传功能是常见的业务需求。但当遇到大文件(如视频、高清图片)上传时,开发者往往会面临一系列性能问题: 上传过程中页面卡顿甚至假死 网络波动导致…

作者头像 李华
网站建设 2026/7/31 15:57:44

RAG 混合检索:关键词 + 语义

《AI 知识卡片》第 11 期 一条抓字面,一条抓意思,再算最终排名前面一期讲过语义检索:搜“番茄”也能找到“西红柿”。但它有个短板——该精确的时候不精确。你搜一个准确的产品型号、一个函数名,要的是一字不差那一条&#xff0c…

作者头像 李华