HarmonyOS 如何判断scroll里面的某个子组件滚到屏幕的最上方

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

可以使用currentOffset来获取当前Scroll的滚动偏移量,代码如下:

.onScroll((xOffset: number, yOffset: number) => {
  this.tabPosY = this.topAreaHeight - this.scroller.currentOffset()
    .yOffset <= 0 ? 0 : this.topAreaHeight - this.scroller.currentOffset()
    .yOffset
})

然后判断子组件在Scroll的位置与偏移量做对比,计算出到达顶部时的偏移量。子组件的位置是添加到scroll的时候的位置。

或者可以根据子组件相对于屏幕的位置来判断是否在最上方:可以使用 componentUtils.getRectangleById根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐标位置和大小同步返回给开发者。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-componentutils-V5#componentutilsgetrectanglebyid

可参考以下代码:也可获取相对于屏幕当前的位置screenOffset进行处理:

import matrix4 from '@ohos.matrix4';
import componentUtils from '@ohos.arkui.componentUtils';

@Entry
@Component
struct Utils {
  @State x: number = 120;
  @State y: number = 10;
  @State z: number = 100;
  @State value: string = '';
  private matrix1 = matrix4.identity().translate({ x: this.x, y: this.y, z: this.z });
  build() {
    Column() {
      Image($r("app.media.img"))
        .transform(this.matrix1)
        .translate({ x: 20, y: 20, z: 20 })
        .scale({ x: 0.5, y: 0.5, z: 1 })
        .rotate({
          x: 1,
          y: 1,
          z: 1,
          centerX: '50%',
          centerY: '50%',
          angle: 300
        })
        .width(300)
        .height(100)
        .key("image_01")
      Button('getRectangleById')
        .onClick(() => {
          this.value = JSON.stringify(componentUtils.getRectangleById("image_01"))
        }).margin(10).id('onClick')
      Text(this.value)
        .margin(20)
        .width(300)
        .height(300)
        .borderWidth(2)
    }.margin({left: 50})
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 判断组件滚出了屏幕
45浏览 • 1回复 待解决
如何判断对象是某个interface实现
1168浏览 • 1回复 待解决
HarmonyOS 如何判断控件移出了屏幕
113浏览 • 1回复 待解决
HarmonyOS 如何判断手机屏幕类型
51浏览 • 1回复 待解决
如何查看mysql表里面的数据?
2491浏览 • 1回复 待解决