HarmonyOS5教育类行业实践-双向滚动课程表(一)
点我加入我的战队!领鸿蒙限定礼盒
场景介绍
双向滚动课程表是教育类应用中的典型场景之一。
本示例基于List组件和Scroll组件实现课程表横向和纵向滚动的功能。
效果预览
实现思路
- 页面分为两部分,左侧展示课程表节数和上课时间,右侧展示星期数和课程数据列表。
- 右侧的课程数据使用双层Scroll来实现数据的左右滑动。为了达到滑动左侧课程表时间部分和上部星期数,对应的数据也同步滑动的效果,在onScrollFrameBegin回调中设置列表的垂直滚动控制器和水平滚动控制器;反之同理。
- // CourseTablePage.ets
- Row() {
- Scroll(this.classScroller) {...}
- .onScrollFrameBegin((offset: number) => {...})
- Scroll(this.timeScroller) {...}
- .onScrollFrameBegin((offset: number) => {...})
- Column() {
- Scroll(this.weekdaysScroller) {...}
- .onScrollFrameBegin((offset: number) => { // 同步水平位移量
- this.horizontalScroller.scrollBy(offset, 0);
- return { offsetRemain: offset };
- })
- Scroll(this.horizontalScroller) {
- Scroll(this.verticalScroller) {...}
- .onScrollFrameBegin((offset: number) => { // 同步垂直位移量
- this.classScroller.scrollBy(0, offset);
- this.timeScroller.scrollBy(0, offset)
- return { offsetRemain: offset };
- })
- }
- .onScrollFrameBegin((offset: number) => { // 同步水平位移量
- this.weekdaysScroller.scrollBy(offset, 0);
- return { offsetRemain: offset };
- })
- ...
- }
- 通过在组件的onAppear函数中对Scroller设置课程表初始定位到当前星期数。
- // CourseTablePage.ets
- Row(){...}
- .onAppear(() => {
- if(this.weekDay > 1) {
- this.weekdaysScroller.scrollTo({ xOffset: (this.weekDay - 1) * 130, yOffset: 0 })
- this.horizontalScroller.scrollTo({ xOffset: (this.weekDay - 1) * 130, yOffset: 0 })
- }
- })
约束与限制
- 本示例支持API Version 17 Release及以上版本。
- 本示例支持HarmonyOS 5.0.5 Release SDK及以上版本。
- 本示例需要使用DevEco Studio 5.0.5 Release及以上版本进行编译运行。
工程目录
- ├──entry/src/main/ets // 代码区
- │ ├──dataModel
- │ │ └──Course.ets // 课程数据
- │ ├──entryability
- │ │ └──EntryAbility.ets // 程序入口
- │ ├──entryability
- │ │ └──EntryBackupAbility.ets
- │ └──pages
- │ └──CourseTablePage.ets // 商品展示页
- └──entry/src/main/resources // 应用资源目录
参考文档
List
Scroll
挂载卸载事件
代码下载
双向滚动课程表示例代码