HarmonyOS 鸿蒙Next Swiper嵌套List在响应滚动回调监听里,拿不到离开垂直方向的偏移量 let offsetY = this.listScroller.currentOffset().yOffset;

HarmonyOS 鸿蒙Next Swiper嵌套List在响应滚动回调监听里,拿不到离开垂直方向的偏移量 let offsetY = this.listScroller.currentOffset().yOffset;


更多关于HarmonyOS 鸿蒙Next Swiper嵌套List在响应滚动回调监听里,拿不到离开垂直方向的偏移量 let offsetY = this.listScroller.currentOffset().yOffset;的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

是List带的scroller的问题,listScroller不能一直用一个,每个swiper页面都需要用一个新的Scroller,参考下面的示例,可以正常得到yOffset:

cke_89800.png

class MyDataSource implements IDataSource {
  private list: number[] = []

  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): number {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
  }

  unregisterDataChangeListener() {
  }
}

@Entry
@Component
struct Index {
  private swiperControl:SwiperController = new SwiperController();
  private data: MyDataSource = new MyDataSource([]);
  private listData: number[] = []
  private listScroller: Scroller[] = [];

  aboutToAppear(): void {
    let list: number[] = []
    for (let i = 1; i <= 10; i++) {
      list.push(i);
      this.listData.push(i);
      this.listScroller.push(new Scroller());
    }
    this.data = new MyDataSource(list)
  }

  build() {
    RelativeContainer() {
      Swiper(this.swiperControl) {
        LazyForEach(this.data, (item: string, index: number) => {
          Column() {
            List({scroller: this.listScroller[index]}) {
              ForEach(this.listData, (item:number, index: number) => {
                ListItem() {
                  Text(item.toString())
                    .width('90%')
                    .height(160)
                    .backgroundColor(0xAFEEEE)
                    .textAlign(TextAlign.Center)
                    .fontSize(30)
                }.onClick(()=>{
                  console.info("test toffset index: %d", index)
                })
              })
            }.onReachEnd(()=>{
              let offsetY = this.listScroller[index].currentOffset().yOffset
              console.info("get toffset: %d", offsetY);
            })
            .height('90%')
            .width('100%')
          }
          .height('100%')
          .width('100%')
        }, (item: string) => item)
      }

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

更多关于HarmonyOS 鸿蒙Next Swiper嵌套List在响应滚动回调监听里,拿不到离开垂直方向的偏移量 let offsetY = this.listScroller.currentOffset().yOffset;的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,当你遇到在Next Swiper嵌套List组件时,无法在滚动回调监听里正确获取离开垂直方向的偏移量(offsetY)的问题,这通常与组件的滚动事件处理机制或状态同步有关。

确保你的listScroller对象正确初始化并指向了嵌套的List组件。此外,检查currentOffset()方法的调用时机和上下文,确保它在滚动事件触发时被正确调用。由于鸿蒙系统的UI框架可能在滚动事件处理上有其特定的逻辑,可能需要确保在UI线程或正确的生命周期阶段调用此方法。

此外,验证currentOffset()返回的对象结构,确保.yOffset属性存在且可访问。鸿蒙系统的API可能与常见的Web或移动开发框架有所不同,特别是在处理UI组件状态和事件时。

如果currentOffset()方法返回的对象结构不符合预期,或者yOffset属性总是为0或未定义,可能是组件状态未正确更新或事件处理逻辑有误。检查是否有其他代码干扰了滚动状态的更新,或者尝试在不同的生命周期方法或事件回调中调用currentOffset()

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部