HarmonyOS开发5.0【实现页面滑动Scroll】方法

打印 上一主题 下一主题

主题 1057|帖子 1057|积分 3171

鸿蒙OS页面滑动 Scroll方法

在前端中我们在做H5时,页面的滑动是可以靠内容来撑开举行滑动,而在的鸿蒙OS中,页面的滑动并不能靠内容撑出来,如果想要实现页面滑动结果我们就要利用容器组件使页面能举行滑动。
1.Scroll

可滚动的容器组件,当子组件的布局尺寸超过Scroll的尺寸时,内容可以滚动。当页面内容由多个区域组成,并且可以滚动时,推荐利用 Scroll
1.1基本用法

  1. Scroll(){
  2.   // 只能有一个子组件
  3.   Column(){
  4.     // 内容放在内部
  5.     // 尺寸超过 Scroll 即可滚动
  6.   }
  7. }
  8. .width('100%')
  9. .height(200)
复制代码
接下来我们简单利用一下


1.2Scroll的属性

滚动方向属性scrollable

滑动我们可以分为横向和竖向,默认情况我们是竖向滚动,如果想变为横向,这个时候我们就需要利用scrollable属性来切换滚动方向,ScrollDirection.Vertical 纵向 | ScrollDirection.Horizontal 横向,下面我们就来演示一下横向滚动,我们改变以下布局容器,将Column改为Row,并给Scroll添加scrollable属性


扩展 在这里为什么我要把Column改为Row

简单的说 ,Column是垂直布局 row是水平布局

滚动条设置

我们在滚动的时候发现有滚动条的存在,在有的时候我们想要把滚动条去掉大概改变颜色等等,这个时候我们就要用到scrollBar设置滚动条状态,scrollBarColor设置滚动条的颜色,scrollBarWidth设置滚动条的宽度接下来我们简单利用一下
scrollBar设置滚动条状态

  1. .scrollBar(BarState.Off)
复制代码


scrollBarColor设置滚动条的颜色,scrollBarWidth设置滚动条的宽度

当时这并不常用~


edgeEffect设置边缘滑动结果

在我们滑动到顶部大概底部的时候,我们不希望他急刹车一样停住,这个时候我们就需要edgeEffect来设置,
  1. .edgeEffect(EdgeEffect.XXX)
复制代码
  1. EdgeEffect.None 无
  2. EdgeEffect.Spring 弹簧
  3. EdgeEffect.Fade 阴影
复制代码



1.2Scroll的控制器

一样平常开发中大概需要通过代码控制滚动,以及获取滚动的距离,就比如掘金,滚动到一定位置就会表现返回顶部的图标 点击图标返回顶部 这个时候就可以通过 Scroll 的控制器来实现,我们来看一下基本代码

  1. @Entry
  2. @Component
  3. struct Index {
  4.   // 1. 创建 Scroller 控制器
  5.   scroller: Scroller = new Scroller()
  6.   build() {
  7.     Column() {
  8.       // 2. 设置给Scroll
  9.       Scroll(this.scroller) {
  10.         // 内容
  11.       }
  12.     }
  13.   }
  14. }
复制代码
在这里我们会用到两种方法
   scrollEdge
    currentOffset
  滚动到容器边缘,不区分滚动轴方向,Edge.Top和Edge.Start表现相同,Edge.Bottom和Edge.End表现相同。
  1. this.scroller.scrollEdge(Edge.Top)顶部
  2. this.scroller.scrollEdge(Edge.Start)开头
  3. this.scroller.scrollEdge(Edge.Bottom)底部
  4. this.scroller.scrollEdge(Edge.End)结尾
复制代码
演示一下


额外补充 滚动速度

有的时候我们不可滚动这么快 这个时候我们可以在this.scroller.scrollEdge()添加第二个参数
  1. this.scroller.scrollEdge(Edge.Top,{velocity:3000})
复制代码

  1. this.scroller.currentOffset().xOffset // x 轴滚动距离
  2. this.scroller.currentOffset().yOffset // y 轴滚动距离
复制代码
1.3 Scroll 事件

Scroll 组件提供了一些事件,可以得当的时候添加逻辑
   onScroll(event: (xOffset: number, yOffset: number) => void) 滚动事件回调, 返回滚动时水平、竖直方向偏移量。
  触发该事件的条件 :
  1、滚动组件触发滚动时触发,支持键鼠操作等其他触发滚动的输入设置。
  2、通过滚动控制器API接口调用。
  3、越界回弹。
  代码写法
  1. Scroll(){
  2.   // 内容略
  3. }
  4.   .onScroll((x,y)=>{
  5.     // 滚动时 一直触发
  6.     // 结合 scroller的currentOffset方法 获取滚动距离
  7.   })
复制代码
综合实战

已经学完了基本用法,直接进入小小的实战,要求滚动距离 >400 时表现返回顶部按钮 <400时隐藏,点击返回顶部。
结果展示


参考答案

  1. @Entry
  2. @Component
  3. struct Index {
  4.   scroller: Scroller = new Scroller()
  5.   @State isShow:boolean=false
  6.   build() {
  7.     Column(){
  8.       Scroll(this.scroller){
  9.         // 只能有一个子组件
  10.         Column(){
  11.           Text('页面滚动')
  12.             .height(200)
  13.             .width('100%')
  14.             .backgroundColor(Color.Pink)
  15.           Text('页面滚动')
  16.             .height(200)
  17.             .width('100%')
  18.             .backgroundColor(Color.Orange)
  19.           Text('页面滚动')
  20.             .height(200)
  21.             .width('100%')
  22.             .backgroundColor(Color.Blue)
  23.           Text('页面滚动')
  24.             .height(200)
  25.             .width('100%')
  26.             .backgroundColor(Color.Gray)
  27.           Text('页面滚动')
  28.             .height(200)
  29.             .width('100%')
  30.             .backgroundColor(Color.Yellow)
  31.           Text('页面滚动')
  32.             .height(200)
  33.             .width('100%')
  34.             .backgroundColor(Color.Pink)
  35.           Text('页面滚动')
  36.             .height(200)
  37.             .width('100%')
  38.             .backgroundColor(Color.Orange)
  39.           Text('页面滚动')
  40.             .height(200)
  41.             .width('100%')
  42.             .backgroundColor(Color.Blue)
  43.           Text('页面滚动')
  44.             .height(200)
  45.             .width('100%')
  46.             .backgroundColor(Color.Gray)
  47.           Text('页面滚动')
  48.             .height(200)
  49.             .width('100%')
  50.             .backgroundColor(Color.Yellow)
  51.           Text('页面滚动')
  52.             .height(200)
  53.             .width('100%')
  54.             .backgroundColor(Color.Pink)
  55.           Text('页面滚动')
  56.             .height(200)
  57.             .width('100%')
  58.             .backgroundColor(Color.Orange)
  59.           Text('页面滚动')
  60.             .height(200)
  61.             .width('100%')
  62.             .backgroundColor(Color.Blue)
  63.           Text('页面滚动')
  64.             .height(200)
  65.             .width('100%')
  66.             .backgroundColor(Color.Gray)
  67.           Text('页面滚动')
  68.             .height(200)
  69.             .width('100%')
  70.             .backgroundColor(Color.Yellow)
  71.         }
  72.       }
  73.       .width('100%')
  74.       .height('100%')
  75.       .onScroll((x,y)=>{
  76.         if(this.scroller.currentOffset().yOffset>400){
  77.           this.isShow = true
  78.         }else{
  79.           this.isShow = false
  80.         }
  81.       })
  82.       if (this.isShow){
  83.         Column(){
  84.           Text('返回顶部')
  85.             .width(150)
  86.             .height(150)
  87.             .fontColor('#fff')
  88.             .textAlign(TextAlign.Center)
  89.             .backgroundColor(Color.Black)
  90.             .offset({y:-150})
  91.             .onClick(()=>{
  92.               this.scroller.scrollEdge(Edge.Top,{velocity:1000})
  93.             })
  94.         }
  95.       }
  96.     }
  97.     .width('100%')
  98.     .height('100%')
  99.   }
  100. }
复制代码
竣事语

Scroll 只是实现鸿蒙滚动的其中一个方法,方法还有许多如List,Grid也都可以实现滚动结果,其他方法下次分享,第一次分享鸿蒙 记录一下 如果我分享的方法有错误的地方请大佬们批评,我会积极改正,OK告终束

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表