HarmonyOS onScroll回调换成onWillScroll滑动到最上面闪退

ScrollView滑动回弹,只留下面回弹效果,不留上面回弹,所以滑动到最上面时设置

this.scroller.scrollTo({ xOffset: 0, yOffset: 0 });

使用onScroll没有问题,换成onWillScroll会闪退,报错如下

Pid:62737
Uid:20020126
Reason:RangeError
Error name:RangeError
Error message:Stack overflow!
SourceCode:
this.scroller.scrollTo({ xOffset: 0, yOffset: 0 });
HarmonyOS
2024-12-25 11:24:53
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

onWillScroll是在滚动前触发 ,此时无法使用scrollTo。可参考如下代码:

import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = 'start HelloWorld HelloWorldHelloWorld' +
    'HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld' +
    'HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld' +
    'HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld end';
  scroller: Scroller = new Scroller()
  @State flag: boolean = false
  @State number: number = 0

  build() {
    Scroll(this.scroller) {
      Text(this.message)
        .fontSize(50)
        .textAlign(TextAlign.Center)
        .fontWeight(FontWeight.Bold)
        .backgroundColor(Color.Blue)//.height('100%')
        .width('100%')

    }


    //todo 使用此方法可以正常使用   设置上面没有弹出效果
    // .onScroll(() => {
    //   //设置上面没有弹出效果
    //   promptAction.showToast({ message: `:${this.scroller.currentOffset().yOffset}` })
    //   if (this.scroller.currentOffset().yOffset <= 0) {
    //     this.scroller.scrollTo({ xOffset: 0, yOffset: 0 })
    //   }
    // })
    //todo 换成onWillScroll上滑就会闪退

    .onWillScroll((xOffset: number, yOffset: number): void | OffsetResult => {

      if (yOffset >= 0) {
        let res: OffsetResult = { xOffset: 0, yOffset: yOffset }
        this.flag = true
        return res
      } else if (yOffset < 0) {
        if (this.scroller.currentOffset().yOffset > 0) {
          let res: OffsetResult = { xOffset: 0, yOffset: yOffset }
          this.flag = true
          return res
        } else {
          let res: OffsetResult = { xOffset: 0, yOffset: -(this.scroller.currentOffset().yOffset) }
          this.flag = false
          return res
        }
      }
    })

    .height('80%')
    .width('100%')
    .edgeEffect(this.flag ? EdgeEffect.Spring : EdgeEffect.None)
    .backgroundColor(Color.Red)
  }
}
分享
微博
QQ
微信
回复
2024-12-25 15:03:23
相关问题
HarmonyOS Scroll组件onScroll调异常
175浏览 • 1回复 待解决
HarmonyOS应用退问题
987浏览 • 1回复 待解决
HarmonyOS 退报错 Error code:2100001
229浏览 • 1回复 待解决
HarmonyOS 手势处理高概率退
178浏览 • 1回复 待解决
HarmonyOS onScroll调yoffset不准确问题
819浏览 • 1回复 待解决
HarmonyOS number toFixed方法退
342浏览 • 1回复 待解决
HarmonyOS 使用Webview会退
287浏览 • 1回复 待解决
HarmonyOS react-native-webview退问题
255浏览 • 1回复 待解决
HarmonyOS升级后,react-native-svg退
259浏览 • 1回复 待解决
打开图库应用时偶尔会退
2723浏览 • 0回复 待解决
HarmonyOS 申请短时后台任务退
256浏览 • 1回复 待解决
HarmonyOS 页面返回时应用退报错
1013浏览 • 1回复 待解决
HarmonyOS PixelMap.rotate接口导致退
301浏览 • 1回复 待解决
加载FFMpeg后APP出现退
519浏览 • 1回复 待解决
HarmonyOS C++ 调用 ets 层函数报错退
376浏览 • 1回复 待解决
HarmonyOS 主线程耗时任务,app退
320浏览 • 1回复 待解决
鸿蒙js开发 文件交互Api 退
6906浏览 • 2回复 待解决