0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙ArkTS声明式开发:跨平台支持列表【组件可见区域变化事件】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-30 10:37 次阅读

组件可见区域变化事件

组件可见区域变化事件是组件在屏幕中的显示区域面积变化时触发的事件,提供了判断组件是否完全或部分显示在屏幕中的能力,适用于广告曝光埋点之类的场景。

说明:
开发前请熟悉鸿蒙开发指导文档 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

事件

名称功能描述
onVisibleAreaChange(ratios: Array, event: (isVisible: boolean, currentRatio: number) => void)组件可见区域变化时触发该回调。 -ratios:阈值数组。其中,每个阈值代表组件可见面积(即组件在屏幕显示区的面积)与组件自身面积的比值。当组件可见面积与自身面积的比值大于或小于阈值时,均会触发该回调。每个阈值的取值范围为[0.0, 1.0],如果开发者设置的阈值超出该范围,则会实际取值0.0或1.0. -isVisible:表示组件的可见面积与自身面积的比值是否大于阈值,true表示大于,false表示小于。 -currentRatio:触发回调时,组件可见面积与自身面积的比值。**说明:**该接口只适用于组件布局区域超出或离开了当前屏幕显示区域的情况,不支持组件堆叠(Stack)导致的面积不可见、使用offset或translate等图形变换接口导致的面积超出情况。

示例

鸿蒙文档.png

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿`
    
// xxx.ets
@Entry
@Component
struct ScrollExample {
  scroller: Scroller = new Scroller()
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  @State testTextStr: string = 'test'
  @State testRowStr: string = 'test'

  build() {
    Column() {
      Column() {
        Text(this.testTextStr)
          .fontSize(20)

        Text(this.testRowStr)
          .fontSize(20)
      }
      .height(100)
      .backgroundColor(Color.Gray)
      .opacity(0.3)

      Scroll(this.scroller) {
        Column() {
          Text("Test Text Visible Change")
            .fontSize(20)
            .height(200)
            .margin({ top: 50, bottom: 20 })
            .backgroundColor(Color.Green)
              // 通过设置ratios为[0.0, 1.0],实现当组件完全显示或完全消失在屏幕中时触发回调
            .onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) = > {
              console.info('Test Text isVisible: ' + isVisible + ', currentRatio:' + currentRatio)
              if (isVisible && currentRatio >= 1.0) {
                console.info('Test Text is fully visible. currentRatio:' + currentRatio)
                this.testTextStr = 'Test Text is fully visible'
              }

              if (!isVisible && currentRatio <= 0.0) {
                console.info('Test Text is completely invisible.')
                this.testTextStr = 'Test Text is completely invisible'
              }
            })

          Row() {
            Text('Test Row Visible  Change')
              .fontSize(20)
              .margin({ bottom: 20 })

          }
          .height(200)
          .backgroundColor(Color.Yellow)
          .onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) = > {
            console.info('Test Row isVisible:' + isVisible + ', currentRatio:' + currentRatio)
            if (isVisible && currentRatio >= 1.0) {
              console.info('Test Row is fully visible.')
              this.testRowStr = 'Test Row is fully visible'
            }

            if (!isVisible && currentRatio <= 0.0) {
              console.info('Test Row is is completely invisible.')
              this.testRowStr = 'Test Row is is completely invisible'
            }
          })

          ForEach(this.arr, (item) = > {
            Text(item.toString())
              .width('90%')
              .height(150)
              .backgroundColor(0xFFFFFF)
              .borderRadius(15)
              .fontSize(16)
              .textAlign(TextAlign.Center)
              .margin({ top: 10 })
          }, item = > item)

        }.width('100%')
      }
      .backgroundColor(0x317aff)
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.On)
      .scrollBarColor(Color.Gray)
      .scrollBarWidth(10)
      .onScroll((xOffset: number, yOffset: number) = > {
        console.info(xOffset + ' ' + yOffset)
      })
      .onScrollEdge((side: Edge) = > {
        console.info('To the edge')
      })
      .onScrollStop(() = > {
        console.info('Scroll Stop')
      })

    }.width('100%').height('100%').backgroundColor(0xDCDCDC)
  }
}

zh-cn_visible_area_change.gif

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 组件
    +关注

    关注

    1

    文章

    425

    浏览量

    17661
  • 鸿蒙
    +关注

    关注

    55

    文章

    2103

    浏览量

    42272
收藏 人收藏

    评论

    相关推荐

    鸿蒙ArkTS的起源和简介

    新的声明开发范式,基于Skia的自绘制引擎构建可平台的独立的渲染能力。这是一种较为创新的方案,不过也有几点不足: Dart语言生态。尽管
    发表于 01-16 16:23

    鸿蒙入门实战-ArkTS开发

    声明UI基本概念 应用界面是由一个个页面组成,ArkTS是由ArkUI框架提供,用于以声明开发
    发表于 01-16 17:27

    HUAWEI DevEco Studio 3.1版本发布,配套ArkTS声明开发全面升级

    HarmonyOS应用及服务的一站集成开发环境(IDE),DevEco Studio 3.1将配套ArkTS声明
    发表于 11-17 11:52

    HarmonyOS/OpenHarmony应用开发-ArkTS声明开发范式

    基于ArkTS声明开发范式的方舟开发框架是一套开发极简、高性能、
    发表于 01-17 15:09

    HarmonyOS/OpenHarmony应用开发-ArkTS组件可见区域变化事件

    一、事件组件可见区域变化事件是组件在屏幕中的显示区域面积变化
    发表于 03-17 16:25

    HarmonyOS/OpenHarmony应用开发--ArkTS组件区域变化事件

    一、事件组件区域变化事件指组件显示的尺寸、位置等发生变化时触发的事件。(api8开始支持)名称
    发表于 03-21 10:53

    HarmonyOS优选主力应用开发语言-ArkTS概述

    之前,建议开发者具备TS语言开发能力。 当前,ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义了声明
    发表于 06-09 10:52

    鸿蒙 OS 应用开发初体验

    的操作系统平台开发框架。HarmonyOS 的目标是实现设备的无缝协同和高性能。 DevEco Studio 对标 Android Studio,开发
    发表于 11-02 19:38

    鸿蒙开发ArkTS基础知识

    一、ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配了鸿蒙的ArkUI框架,扩展了
    的头像 发表于 01-24 16:44 1185次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>之<b class='flag-5'>ArkTS</b>基础知识

    鸿蒙ArkTS声明开发:跨平台支持列表组件快捷键事件】

    开发者可以设置组件的自定义组合键,组合键的行为与click行为一致,组件在未获得焦点状态下也可以响应自定义组合键,每个组件可以设置多个组合键。
    的头像 发表于 05-28 15:49 138次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【<b class='flag-5'>组件</b>快捷键事件】

    鸿蒙ArkTS声明开发:跨平台支持列表组件区域变化事件】

    组件区域变化事件指组件显示的尺寸、位置等发生变化时触发的事件。
    的头像 发表于 05-30 11:41 192次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【<b class='flag-5'>组件</b><b class='flag-5'>区域</b><b class='flag-5'>变化</b>事件】

    鸿蒙ArkTS声明开发:跨平台支持列表【显隐控制】 通用属性

    控制当前组件显示或隐藏。注意,即使组件处于隐藏状态,在页面刷新时仍存在重新创建过程,因此当对性能有严格要求时建议使用[条件渲染]代替。 默认值:Visibility.Visible 从API version 9开始,该接口支持
    的头像 发表于 06-03 14:46 361次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【显隐控制】 通用属性

    鸿蒙ArkTS声明开发:跨平台支持列表【形状裁剪】 通用属性

    参数为相应类型的组件,按指定的形状对当前组件进行裁剪;参数为boolean类型时,设置是否按照父容器边缘轮廓进行裁剪。 默认值:false 从API version 9开始,该接口支持Ark
    的头像 发表于 06-04 15:22 159次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【形状裁剪】 通用属性

    鸿蒙ArkTS声明开发:跨平台支持列表【多态样式】 通用属性

    设置组件不同状态的样式。 从API version 9开始,该接口支持ArkTS卡片中使用。
    的头像 发表于 06-07 09:48 158次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【多态样式】 通用属性

    鸿蒙ArkTS声明开发:跨平台支持列表【安全区域

    通过expandSafeArea属性支持组件扩展其安全区域
    的头像 发表于 06-13 22:20 126次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>声明</b>式<b class='flag-5'>开发</b>:跨<b class='flag-5'>平台</b><b class='flag-5'>支持</b><b class='flag-5'>列表</b>【安全<b class='flag-5'>区域</b>】