首页 > 其他分享 >关于鸿蒙开发中滚动容器Scroll的介绍

关于鸿蒙开发中滚动容器Scroll的介绍

时间:2024-08-17 10:55:03浏览次数:8  
标签:容器 滚动 鸿蒙 触发 偏移量 ScrollDirection 滚动条 Scroll

当子组件的布局尺寸 超过Scroll的尺寸 时,内容可以滚动。

Scroll的核心用法

用法说明:

  1. Scroll设置尺寸
  2. 设置溢出的子组件【只支持一个子组件
  3. 滚动方向:支持横向和纵向,默认纵向
Scroll(){
    // 只支持一个子组件
    Column(){
        // 内容放在内部
        // 尺寸超过Scroll即可滚动
    }
}
.width('100%')
.height(200)
.scrollable(ScrollDirection.XXX)

scrollable(value: ScrollDirection) 

设置滚动方向。

取值:

  • 纵向:ScrollDirection.Vertical【默认】
  • 横向:ScrollDirection.Horizontal
  • 不可滚动:ScrollDirection.None

Scroll的常见属性

名称参数类型描述
scrollableScrollDirection

设置滚动方向

  • 纵向:ScrollDirection.Vertical【默认】
  • 横向:ScrollDirection.Horizontal
scrollBarBarState

设置滚动条状态

  • 不显示:BarState.Off
  • 常驻显示:BarState.On
  • 按需显示【触摸时显示,2s后消失】:BarState.Auto【默认】
scrollBarColorstring
number
Color

设置滚动条的颜色

默认值:'#182431'(40%不透明度)

scrollBarWidthstring
number

设置滚动条的宽度

默认值:4

单位:vp

edgeEffectvalue:EdgeEffect

设置边缘滑动效果

  • 无效果:EdgeEffect.None
  • 弹簧:EdgeEffect.Spring
  • 阴影:EdgeEffect.Fade

Scroll的控制器

核心步骤:

实例化 Scroller 的控制器

绑定给 Scroll 组件

控制器的方法 控制滚动,控制器属性 获取滚动距离。

struct ScrollDemo {
    scroller: Scroller = new Scroller()
    
    build() {
        Column() {
            Scroll(this.scroller) { ... }
            Row() {
                Button('返回顶部')
                    .onClick(()=>{
                        this.scroller.scrollEdge(Edge.Top)
                    })
                Button('获取滚动距离')
                    .onClick(()=>{
                        const x = this.scroller.currentOffset().xOffset
                        const y = this.scroller.currentOffset().yOffset
                        AlertDialog.show({
                            message:`x:${x},y:${y}`
                        })
                    })
            }
        }
    }
}

Scroll的事件

滚动事件回调,返回滚动时水平、竖直方向偏移量,单位vp。

onScroll

语法:onScroll(event: (xOffset: number, yOffset: number) => void)
Scroll(){
    // 内容
}
.onScroll((x,y)=>{
    //滚动时 一直触发
    // 可以结合 scroller的currentOffset方法 获取滚动距离
})
触发该事件的条件
  1. 滚动组件触发滚动时触发,支持键鼠操作等其他触发滚动的输入设置。
  2. 通过滚动控制器API接口调用。
  3. 越界回弹。

从API version12开始废弃不再使用,推荐使用onWillScroll事件替代。

onWillScroll

滚动事件回调,Scroll滚动前触发。

语法:onWillScroll(handler: ScrollOnWillScrollCallback)
触发该事件的条件
  1. 滚动组件触发滚动时触发,支持键鼠操作等其他触发滚动的输入设置。
  2. 通过滚动控制器API接口调用。
  3. 越界回弹。
ScrollOnWillScrollCallback的取值
参数名类型必填说明
xOffsetnumber

每帧滚动时水平方向的偏移量,Scroll中的内容向左滚动时偏移量为正,向右滚动时偏移量为负。

单位:vp

yOffsetnumber

每帧滚动时竖直方向的偏移量,Scroll中的内容向上滚动时偏移量为正,向下滚动时偏移量为负。

单位:vp

scrollStateScrollState

当前滚动状态

scrollSourceScrollSource当前滚动操作来源
ScrollState枚举说明
名称枚举值描述
ldle0空闲状态。滚动状态回归空闲时触发,控制器提供的无动画方法控制滚动时触发。
Scroll1滚动状态。手指拖动List,拖动滚动条和滚动鼠标滚轮时触发。
Fling2惯性滚动状态。动画控制的滚动都会触发。包括快速滑动松手后的惯性滚动,划到边缘回弹的滚动,快速拖动内置滚动条松手后的惯性滚动,使用滚动控制器提供的带动画的方法控制的滚动。
ScrollSource枚举说明
名称枚举值描述
DRAG0拖拽事件
FLING1拖拽结束之后的惯性滑动
EDGE_EFFECT2EdgeEffect.Spring的边缘滚动效果
OTHER_USER_INPUT3除拖拽外的其他用户输入,如鼠标滚轮、键盘事件等
SCROLL_BAR4滚动条的拖拽事件
SCROLL_BAR_FLING5滚动条拖拽结束后的带速度的惯性滑动
SCROLLER6Scroller的不带动效方法
SCROLLER_ANIMATION7Scroller的带动效方法

标签:容器,滚动,鸿蒙,触发,偏移量,ScrollDirection,滚动条,Scroll
From: https://blog.csdn.net/qq_45569925/article/details/141275941

相关文章

  • 删除镜像报容器依赖错误
    1、删除镜像报容器依赖错误出现这个错误的原因是因为5303b5323a4c容器使用了此镜像。解决:先停止容器、删除容器、之后再镜像即可。2、查看镜像对应的容器#dockerps-a|grep611a37aa5ffc 3、先停止容器#dockerstop5303b5323a4c4、删除容器#dockerrm-f5303b......
  • linux: 同步容器和宿主机的时区设置, 一种实用的 Docker 配置方法
    在容器化的应用部署中,保证容器内的时区与宿主机时区一致是一项常见且重要的需求,特别是在处理日志、定时任务等与时间相关的操作时。本文将探讨如何在使用Docker和DockerCompose时实现时区的同步,并介绍相关命令和配置方法。1.Docker容器的时区同步问题默认情况下,Doc......
  • 鸿蒙交互事件开发01——点击/拖拽/触摸事件
     如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。1  概  述  事件是人机交互的基础,鸿蒙开发中,事件分为两大类:a)通用事件;b)手势事件。......
  • IOC容器和依赖倒置
    1依赖倒置依赖倒置的核心价值:如果没有依赖倒置,全部都是依赖细节,如果分层架构是A层---B层--C层---D层---E层---F层,下层的修改,可能会导致上层随之改变,F层如果改变,E层要改,D层要改,C层要改......影响很大,成水波式向上影响,架构就的极度不稳定。如果都是依赖于抽象的,抽象即接口或抽......
  • 鸿蒙中hvigor自定义任务
    鸿蒙中,各个module都可以自定义hvigor任务进行一些编译期的操作,方便多模块打包时,进行编译期的一些修改和配置下面简单列举下自定义任务的创建import{hapTasks}from'@ohos/hvigor-ohos-plugin';let__Version='1.0.0'exportfunctionloadVersionFun(params){re......
  • 11. 盛最多水的容器【 力扣(LeetCode) 】
    一、题目描述给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。二、测试用例示例1:输入:[1,......
  • 鸿蒙语言ArkTS
    鸿蒙语言ArkTS一.软件布局 可以备份多个ets文件(复制黏贴),但是只执行Index.ets 二.日志文件打印打开预览器就能查看代码运行效果,预览器实时更新(保存就更新)。console.log('说话内容','helloworld')//console.log的语法:console.log('解释',实际内容)会在日志里打印,解释......
  • 鸿蒙编译期变量使用
    需要修改对应module模块的hvigorfile.ts文件,修改内容如下import{hapTasks}from'@ohos/hvigor-ohos-plugin';//当前文件初始内容,不通模块有可能不一样,都不用动letmyParams='我是自定义参数'exportdefault{system:hapTasks,/*Built-inpluginofHvigor.It......
  • 【容器安全系列Ⅰ】- 以进程视角探索容器
        使用容器的一个很大好处是,大多数时候你不必考虑后台发生了什么,像Docker和Kubernetes这样的工具,在向用户隐藏系统复杂性方面做得很好。    但是,当您需要调试和保护容器环境时,了解如何在底层与容器进行交互会非常有帮助。幸运的是,由于大多数容器化工具......
  • 在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
    在Kubernetes(K8S)中,同一个Pod内的不同容器在资源共享和隔离方面有着特定的规则。以下是对这些规则的详细解释:1.资源共享网络命名空间:Pod内的所有容器共享同一个网络命名空间。这意味着它们可以看到相同的网络设备和IP地址,并能够通过localhost相互通信,而无需进行网络地址转换......