HarmonyOS List停止滑动回调不准确

​List 组件有个回调方法 onScrollStop,这个方法不是真正停止的时候调用,而是每次还在往上滑动中,我又往上滑一下也会调用,但是实际上这个时候并没有停止,所以应该是不需要调用的,要么可以再加一个真正停止滑动了的回调也可以。

很多的业务场景都是等 List 停止滚动了再执行,以免影响性能和过多的请求,目前除了 onScrollStop 相对满足要求,但是有上面的问题,导致效果不理想。​

HarmonyOS
2024-10-29 10:35:52
500浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple

​onScrollStop回调不停地被触发的原因是因为在List边缘效果为弹簧效果时,划动经过起始位置时会触发一次,回弹回起始位置时再触发一次。当滑动继续进行且超出边缘时,会再次触发该事件。

如果您希望在滑动到边缘后停止滑动并不再触发该事件,可以考虑设置List的EdgeEffect属性为None,这样就不会有越界回弹的情况发生了。

可以借鉴防抖函特性,在滚动开始时清除查询延迟任务,滚动停止时开始延迟任务。

Demo如下:​

@Entry  
@Component  
struct ListDemo {  
  private arr: number[] = [];  
  private scrollerForScroll: Scroller = new Scroller();  
  private timer: number = 0  
  
  aboutToAppear(): void {  
    for (let i = 0; i < 100; i++) {  
      this.arr.push(i)  
    }  
  }  
  build() {  
    Column() {  
      List({ space: 10, scroller: this.scrollerForScroll }) {  
        ForEach(this.arr, (item: number) => {  
          ListItem() {  
            Text("ListItem" + item)  
              .width("100%")  
              .height("100%")  
              .borderRadius(15)  
              .fontSize(24)  
              .textAlign(TextAlign.Center)  
              .backgroundColor(Color.White)  
          }.width("100%").height(100)  
        }, (item: number) => item + '')  
      }  
      .width("100%")  
      .scrollBar(BarState.Off)  
      .onScrollStart(() => {  
        clearTimeout(this.timer)  
      })  
      .onScrollStop(() => {  
        this.timer = setTimeout(() => {  
          console.log('test onScrollStop')  
        }, 500)  
      })  
    }  
    .width('100%')  
    .height('100%')  
    .backgroundColor(0xDCDCDC)  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
分享
微博
QQ
微信
回复
2024-10-29 17:45:30


相关问题
HarmonyOS onScrollyoffset不准确问题
1345浏览 • 1回复 待解决
HarmonyOS web组件停止JavaScript
730浏览 • 1回复 待解决
HarmonyOS 获取网络的信息不准确
895浏览 • 1回复 待解决
Polyline组件绘制坐标不准确
2892浏览 • 1回复 待解决
HarmonyOS 卡片定时刷新时间不准确
706浏览 • 1回复 待解决
HarmonyOS 获取当前定位不准确
1778浏览 • 1回复 待解决
HarmonyOS uv timer定时器不准确
1338浏览 • 1回复 待解决
mysql LEFT JOIN 使用SUM不准确
3640浏览 • 1回复 待解决
HarmonyOS 地图的路径规划功能不准确
1024浏览 • 1回复 待解决
HarmonyOS List页面如何主动停止滚动
792浏览 • 1回复 待解决
HarmonyOS 事件
1007浏览 • 1回复 待解决
HarmonyOS List联动滑动
573浏览 • 1回复 待解决
HarmonyOS list无法滑动
487浏览 • 1回复 待解决