鸿蒙关于可以实现滚动效果的容器组件的相关知识

news2024/11/18 7:33:23

一、滚动的用途

        生活中,我们在使用各种APP应用的过程中,总是可以看到一些轮播图、内容页面的滑动、组件切换的效果等,这些都是为了提高用户的体验而设计的功能。在编程中,滚动的用途非常广泛,我们经常用在用户界面的交互、数据处理与展示等上面。总之滚动的用途是多种多样的,它可以让我们创造出富有吸引的程序。

二、关于含有滚动效果的容器组件

        在鸿蒙的学习过程中,我们目前接触到了好几个可以实现滚动效果的容器组件,它们分别是:Swiper、Grid、Scroll、Tabs,这几个容器通过不同的样式调整,可以实现不同的滚动的效果,从而达到不同的需求,在编程的过程中,我们通过不同的用户需求,来按需使用。

1、Swiper轮播图组件

Swiper是一个容器组件,它提供滑动轮播显示的能力。当设置了多个子组件后,它可以让这些子组件按照一定的时间间隔进行循环切换。通常用在展示图片上面。这个组件的基本语法为:

Swiper(控制器?) {
  //内部自检可以是Text,Image,Colum,Row等,常见的是配合Image使用
  // 轮播内容 
  // (设置尺寸,撑开swiper)
}
// 设置尺寸(内容拉伸、优先级高)
.width('100%')
.height(100)

它还包含了许多的属性,这些属性又分为两部分,一部分是自身的属性,另一部分是指示器样式的属性。自身的属性有:.vertical、.interval、.autoPlay、.loop;指示器样式的属性有:.indicator。每个属性都有着自己独特的特性。自身的属性():

常用属性
loopboolean是否开启循环。设置为true时表示开启循环,在LazyForEach懒循环加载模式下,加载的组件数量建议大于5个。默认值:true
autoPlayboolean子组件是否自动播放。默认值:false**说明:**loop为false时,自动轮播到最后一页时停止轮播。手势切换后不是最后一页时继续播放。
intervalnumber使用自动播放时播放的时间间隔,单位为毫秒。默认值:3000
verticalboolean是否为纵向滑动。默认值:false

指示器样式的属性——indicator:

// .indicator(Indicator.dot()) 
// 圆点指示器(默认) 
// .indicator(Indicator.digit()) 
// 数字指示器
基础代码
Swiper(){
  // 略
}
  .indicator(
    Indicator.dot()
      // .xxx(设置圆点指示器的属性)
  ) // 圆点指示器(默认)

我们还可以通过一些位置的属性来调整指示器的位置,以及点击/不点击的样式,我们可以通过以下一些属性来调整:

位置

参数名参数类型必填项参数描述
leftLength设置导航点距离Swiper组件左边的距离。默认值:0单位:vp
topLength设置导航点距离Swiper组件顶部的距离。默认值:0单位:vp
rightLength设置导航点距离Swiper组件右边的距离。默认值:0单位:vp
bottomLength设置导航点距离Swiper组件底部的距离。默认值:0单位:vp
常见样式
参数名参数类型必填项参数描述
itemWidthLength设置Swiper组件圆点导航指示器的宽,不支持设置百分比。默认值:6单位:vp
itemHeightLength设置Swiper组件圆点导航指示器的高,不支持设置百分比。默认值:6单位:vp
selectedItemWidthLength设置选中Swiper组件圆点导航指示器的宽,不支持设置百分比。默认值:12单位:vp
selectedItemHeightLength设置选中Swiper组件圆点导航指示器的高,不支持设置百分比。默认值:6单位:vp
colorResourceColor设置Swiper组件圆点导航指示器的颜色。默认值:'#182431'(10%透明度)
selectedColorResourceColor设置选中Swiper组件圆点导航指示器的颜色。默认值:'#007DFF'

除了自身属性实现滚动,我们还可以通过按钮点击的形式来控制它的前后滚动,这我们就用到了一个其他的控制器了——SwpierController。它通过创建一个控制器对象,然后和轮播图组件进行绑定,最后通过SwiperController对象核心方法来进行上一页和下一页的切换。

语法为:

@Entry
@Component
struct SwiperDemo {
  // 1.创建控制器对象
  controller: SwiperController = new SwiperController()

  build() {
    Column({ space: 10 }) {
      // 2. 设置给 Swiper
      Swiper(this.controller) {
        // 略
      }
      Row() {
        Button('上一页')
          .onClick(() => {
            // 3.调用控制器的方式实现切换效果
            this.controller.showPrevious()
          })
        Button('下一页')
          .onClick(() => {
            this.controller.showNext()
          })
      }

    }
    .width('100%')
    .height('100%')

    // .padding(20)
  }
}
2、Grid网格布局

Grid是一个容器组件,它可以让内容按照指定的行列显示,并且可以设置滚动。它是一个强大的布局系统,它让我们对于页面中的一些卡片的布局更加整洁,提升了用户的整体体验和观看效果。

语法
Grid(){
GridItem(){
    组件
  }
}

2.1 固定行列的设置

在Grid容器组件中,我们通过给它设置行列的占比等分属性来达到行列的效果。其中属性包含:columnsTemplate、rowsTemplate、columnsGap、rowsGap。

语法

Grid(){

}
 .columnsTemplate('1fr 1fr 1fr')
 .rowsTemplate('1fr 1fr 1fr')
 //以上两个属性配合生成一个固定行列的宫格
 .columnsGap(5)
 .rowsGap(5)
2.2 合并行列的设置

在日常开发中除了等比的网格布局外,我们还需要一些大小不均的网格,这我们就得用到合并行列的这个属性了。在合并行列的属性中,我们就不能设置在Grid容器上来,我们得设置在它的子组件GridItem上。在设置的过程中我们又得看要设置行还是列,以此来判断要使用的属性。我们通过在它身上使用columnStart()和columnEnd()这两个属性设置它需要合并的列。那么,设置合并列的属性就是rowStart()和rowEnd()了。

GridItem的属性

名称参数类型描述
rowStartnumber指定当前元素起始行号。
rowEndnumber指定当前元素终点行号。
columnStartnumber指定当前元素起始列号。
columnEndnumber指定当前元素终点列号。

 

2.3 滚动的设置

在日常生活中,我们所见到的app内容它包含在容器组件里面是可以上下或者左右滑动的,比如:文件管理、购物、视频列表等。在开发的过程中,我们就得通过设置网格组件的属性来达到滚动的效果了,页面的滚动我们主要是水平的滚动和页面垂直滚动。我们通过设置Grid的rowsTemplate/columnsTemplate(里面的内容超出设置的屏幕宽高后实现滚动效果)属性来设置水平还是垂直。

2.4 控制滚动的设置

日常中除了容器自己滚动,我们还可以人为的点击实现滚动以此来达到自己目的。这个设置的方式是我们通过自定义一个scroller对象,然后将它绑定到Grid容器组件上,最后通过调用 Scroller 对象的 scrollPage 方法实现点击滚动的效果。

语法

 
// 创建 Scroller 对象
scroller: Scroller = new Scroller()

// 设置给 Grid
 Grid(this.scroller) {
   // ...
 }

// 通过代码控制
this.scroller.scrollPage({
  next:true // 下一页
  next:false // 上一页
})

2.5 自定义滚动的设置

在开发的过程中,用户在使用app的过程中对于滚动条样式审美的提升,不断向开发人员提出建议,开发人员不得不改变滚动条样式。通过使用ScrollBar组件(需要和Grid公用同一个Scroller)来自定义样式。

Grid的属性

属性名类型说明
scrollBarBarState设置滚动条状态。默认值:BarState.autoBarState.off 关闭BarState.on 常驻BarState.auto 按需显示
scrollBarColorstring、 number、Color设置滚动条的颜色。
scrollBarWidthstring、number设置滚动条的宽度。宽度设置后,滚动条正常状态和按压状态宽度均为滚动条的宽度值。默认值:4单位:vp

scrollBar的参数

参数名参数类型必填参数描述
scrollerScroller可滚动组件的控制器。用于与可滚动组件进行绑定。
directionScrollBarDirection滚动条的方向,控制可滚动组件对应方向的滚动。默认值:ScrollBarDirection.Vertical
stateBarState滚动条状态。默认值:BarState.Auto

用法

// 和 Grid 共用同一个 Scroller

scroller: Scroller = new Scroller()

// 和 Grid 共用同一个 Scroller

Grid(this.scroller){

// 略

}

// 和 Grid 共用同一个 Scroller

// 创建 ScrollBar 组件并设置属性

ScrollBar({

scroller: this.scroller,

direction: ScrollBarDirection.Horizontal // 方向

}) {

// 滚动内容 设置外观即可

Text()

}

// 设置外观

3、Scroll组件

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

3.1核心用法

通过设置Scroll的尺寸,在内部设置子组件的大小和内容,如果子组件的高度超出 Scroll,就竖向滚动;相反,子组件的宽度超出 Scroll,scrollable改为横向滚动。

语法

Scroll(){
  // 只支持一个子组件
  Column(){
    // 内容放在内部
    // 尺寸超过 Scroll 即可滚动
  }
}
.width('100%')
.height(200)

属性

名称参数类型描述
scrollableScrollDirection设置滚动方向。ScrollDirection.Vertical 纵向ScrollDirection.Horizontal 横向
scrollBarBarState设置滚动条状态。
scrollBarColorstring、 number 、 Color设置滚动条的颜色。
scrollBarWidthstring、number设置滚动条的宽度
edgeEffectvalue:EdgeEffect设置边缘滑动效果。EdgeEffect.None 无EdgeEffect.Spring 弹簧EdgeEffect.Fade 阴影
3.2 控制器的使用

日常开发中可能需要通过代码控制滚动,以及获取滚动的距离,在这里用到了 2 个方法:

  1. scrollEdge:滚动到边缘
  2. currentOffset: 获取当前的偏移量

语法

@Entry
@Component
struct ScrollDemo {
//1.  实例化 Scroller的 控制器
  scroller: Scroller = new Scroller()

  build() {
    Column() {
    //2.  绑定给 Scroll
      Scroll(this.scroller) {
        // 内容略
      }
      Row() {
        Button('返回顶部')
          .onClick(() => {
            // 滚到顶部
            this.scroller.scrollEdge(Edge.Top)
          })
        //3.  调用 控制器的方法控制滚动,通过控制器的属性获取滚动距离
        Button('获取滚动距离')
          .onClick(() => {
            const x = this.scroller.currentOffset().xOffset
            const y = this.scroller.currentOffset().yOffset
            AlertDialog.show({
              message:`x:${x},y:${y}`
            })
          })
      }
    }
  }
}

scrollEdge方法参数

滚动到的边缘位置。

Edge.Top 顶部

Edge.Start 开头

Edge.Bottom 底部

Edge.End 结尾

currentOffset 方法返回值

xOffset: 水平滑动偏移;

yOffset: 竖直滑动偏移。

3.3 onScroll 事件【Api12开始请使用onWillScroll事件替代】
名称功能描述
onScroll(event: (xOffset: number, yOffset: number) => void)滚动事件回调, 返回滚动时水平、竖直方向偏移量。触发该事件的条件 :1、滚动组件触发滚动时触发,支持键鼠操作等其他触发滚动的输入设置。2、通过滚动控制器API接口调用。3、越界回弹。
Scroll(){
  // 内容略
}
  .onScroll((x,y)=>{
    // 滚动时 一直触发
    // 可以结合 scroller的currentOffset方法 获取滚动距离
  })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Umi-OCR 文字识别工具

免费开源的离线orc识别功能 git地址 感谢大佬的贡献 Umi-OCR 文字识别工具 使用说明 • 下载地址 • 更新日志 • 提交Bug 免费,开源,可批量的离线OCR软件 适用于 Windows7 x64 、Linux x64 免费:本项目所有代码开源&#x…

C++ 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)

在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1​(x1​,y1​) 和 P2​(x2​,y2​),我们想要找到通过这两个点的直线方程。 直线方程的形式 直线的方程通常表示为 ymxb,其中 m 是斜率,b 是 …

PMP核心知识点—之项目管理基础

知识点1:项目的临时性 项目的临时性是指项目有明确的开始时间和结束时间,但并不能表示项目的周期短,项目的周期从几个月、几年到几十年都有。 知识点2:项目的独特性 独特的产品、服务或成果。 知识点3:项目创造商业价值…

ARCGIS 纸质小班XY坐标转电子要素面

1、准备好excel 坐标 小班号、点位链接的顺序、X、Y 4个缺一不可,需要注意的是,点位顺序的格式最好为数字,若为其他格式可能会出现排序混乱,会以1-9 11-19等字符串的排序连接。 excel文件转为csv才能识别,CSV只能保留第…

错过了游科的黑神话?别急,国内这些公司也在招聘中,都是做3A游戏的,速来!

近日,由游戏科学工作室打造的3A游戏——《黑神话:悟空》,不仅在国内引起了前所未有的关注,在全球范围内也引发了巨大轰动。 游戏玩家们举国欢庆的同时,无数游戏从业者也点燃了对国产3A游戏的憧憬与期待! 据说游科在某…

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能 Java 通用代码生成器光,电音之王尝鲜版八,此版本完善了数据库自动反射功能。完善了多对多候选功能。尝鲜版八在以前的版本上修复了大量缺陷和功…

PDF文件切割,无大小限制

前言 公司让学习一个东西,让写一个学习总结,我想这不是AI的拿手好戏,直接把近100M的PDF喂给他,然后他说吃不下,太大了 小事,那么多在线PDF工具网站,分分钟拆开,然后找了半天也都是…

Java开发笔记-小程序微信支付接入

步骤: 1.注册微信商户,开通小程序支付业务,获得必要接入参数。(Certificate、PrivateKey、merchantId、SerialNumbe、apiV3Key) 2.微信商户号关联小程序(需目标小程序审核) 3.java使用接入参数发起下单,获取下单参数。 4.小程…

新手设计师看一看!2024年PDF转CAD软件TOP4

在现在这个啥都能数字化的时代,文件格式得来回换已经成了我们工作的日常,特别是把PDF转成CAD,对工程师、设计师还有搞建筑的人来说,这事儿特别重要。技术越发展,市面上就出现了好些又快又方便的工具。今天,…

AI+新质生产力,化敌为友的新未来

“新质生产力”是今年的“高频词”。如何将“新质生产力”落到实处,业内纷纷瞄准了同一个关键词:“人工智能”,特别是 “人工智能” ,这个小小的""号代表着无限的可能性。人工智能正在成为现代社会的基础设施&#xff0…

便签内容转移新设备攻略

在桌面使用便签软件记录工作和生活中的点点滴滴,已成为许多人的习惯。它不仅能帮助我们捕捉灵感、记录待办事项,还能提醒我们重要的日程安排。然而,随着设备的更新换代或工作地点的变更,我们有时需要将便签内容从一个设备转移到另…

多门店多端平台系统小程序源码

🔥【健身新纪元】多门店多端分开健身系统,打造你的个性化健身体验🌟 🏋️‍♀️ 一、告别单一,拥抱多元化健身时代 你还在为找不到合适的健身房而烦恼吗?或是想要随时随地开启健身模式,却受限…

聚水潭ERP集成用友NC(用友NC主供应链)

源系统成集云目标系统 用友NC介绍 用友NC是用友NC产品的全新系列,是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计,采用J2EE架构和先进开放的集团级开发平台UAP&am…

UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务 UDS 诊断 - ECUReset(ECU重置)(0x11)服务 UDS 诊断 - SecurityA…

5个网络监控神器,别说老网工藏私不发给你

前言 是2022年度的精选网络工具安利贴,你都看了没? 现在啊,很多企业公司都有不少的网络硬件,而这些网络硬件设备根据不同的功能,会分散在不同的物理位置上。 可能有些网络硬件设备是集中式管理,有些只能…

2024年掏耳勺买什么样的好?四款优良产品推荐,不可错过

21世纪的到来,全民生活品质得到了飞跃进步,大家逐渐开始关注耳道的健康清洁。传统挖耳勺因直径大、材质硬、无法看清耳道等因素,往往很难满足大部分人群的清洁需求,甚至带来不可逆转的伤害。可视挖耳勺的出现,具备可视…

C++第四十弹---从零开始:模拟实现C++中的unordered_set与unordered_map

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1 哈希概念 2 哈希冲突 3 哈希函数 4 哈希冲突解决 4.1 闭散列 4.1.1. 线性探测 4.1.2. 二次探测 4.2 开散列 4.2.1. 开散列概念 4.2.2…

安卓逆向百例十-币coin

typora-root-url: ./pic安卓逆向百例十-币coin 现在售价依旧是99¥,计划更新100案例,平均一个案例1块钱,要什么自行车! 案例起源: 有位老哥 经过炒币失败后想做一个这种查询接口的app,但是苦于他的资金比…

windows系统搭建WSUS更新服务问题整理

1、连接微软更新服务器时,总是连接失败,采取了指定TLS1.2连接的方法,还是连接失败。 解决方法:当时服务器的操作系统为windows server 2012 R2,将操作系统换成windows server 2016可以解决这个问题。 2、客户端怎么配…

Linux发送邮件:如何配置SMTP服务器发信?

linux发送邮件至多个收件人的方法?如何用Linux命令? 在Linux系统中,邮件发送是一个常见且重要的功能,无论是用于系统监控通知还是日常通信。AokSend将详细介绍如何在Linux环境下配置SMTP服务器,以确保您的邮件发送既高…