鸿蒙ArkTs 可见区域变化:公共事件onVisibleAreaChange的使用方法介绍

引入

在做项目的时候,突然遇到了一个问题

这是一个scroll,分为两个区域,橙色和绿色,他们的高度都暂定为100%

此时,我希望滑动到下方的绿色区域的时候做出弹窗提示

非常简单,采用scroll的onScrollEdge轻松实现

@Entry
@Component
struct VisibilityPage {

  build() {
    Scroll(){
      Column(){
        Text('区域一')
          .width('100%')
          .height('100%')
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Orange)
        Text('区域二')
          .height('100%')
          .width('100%')
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Green)

      }
      .width('100%')
    }
    .onScrollEdge((side) => {
    //通过触底的事件来弹出提示
      if (side==Edge.Bottom) {
        AlertDialog.show({message:'欢迎来到区域二'})
      }
    })
    .height('100%')
    .width('100%')
  }
}

但是,这时候需求变更,当区域二的70%展示出来的时候,我们就可以确定已经达到区域二了,可以弹出提示窗了

这个展示70%要怎么实现呢?

经过查阅文档,原来还有这样的一个神奇的事件

组件可见区域变化事件

onVisibleAreaChange(ratios: Array<number>, event: VisibleAreaChangeCallback): T

它可以用来监听区域变化

我们先看下它的参数

ratios:阈值数组

可能这个名词很令人困惑,什么是阈值数组呢?

当需要添加事件的组件,可见的面积到达阈值的时候,就会触发回调

举个例子,我们定义一个数组

arr=[ 0.3,0.5,0.7,1]

当它作为阈值数组的时候

展示区域占区域二的30%,50%,70%,和100%的时候,触发回调

注意并不绝对,当接近阈值的时候就会触发(系统帮你四舍五入)

event:回调函数

它的函数类型是

(isExpanding: boolean, currentRatio: number) => void

isExpanding:直译过来就是是否变大,变大就是true,变小就是false

currentRatio:当前的可见比例

具体示例

现在让我们再回过头看下上面的需求,来试一下onVisibleAreaChange事件吧

@Entry
@Component
struct VisibilityPage {

  arr:number[]=[0.3,0.5,0.7,1]
  build() {
    Scroll(){
      Column(){
        Text('区域一')
          .width('100%')
          .height('100%')
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Orange)
        Text('区域二')
          .height('100%')
          .width('100%')
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Green)
          .onVisibleAreaChange(this.arr,(isExpanding:boolean,currentRatio:number)=>{
            console.log('当前可见比例:',currentRatio,'   是否处于扩展状态:',isExpanding)
          })

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

接下来我们滑动到最下方,再滑动回顶部,观测日志

这下很清晰就可以看到回调的次数和过程了,

其他场景

除了使用比例外,其实可以直接传入一个数组  [0]  

用来监听一个控件的展示与消失

.onVisibleAreaChange([0],(isExpanding:boolean)=>{
            if (isExpanding) {
              //todo 展示出来了
              console.log('===show')
            }else {
              //todo 隐藏了
              console.log('===hide')
            }
          })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值