HarmonyOS 鸿蒙Next 两个Scroll互相监听彼此的滑动-卡顿问题

HarmonyOS 鸿蒙Next 两个Scroll互相监听彼此的滑动-卡顿问题 两个Scroll互相监听彼此的滑动,实现:一个Scroll滑动的同时,另一个Scroll也和它移动一样的距离,问题是:在监听滑动的时候,只能监听到手指移动的距离,所以导致滑动起来有些卡顿,怎么能够在他们滑动的时候给一个惯性呢!

11 回复
scroller1: Scroller = new Scroller()
scroller2: Scroller = new Scroller()
flag = true
Scroll(this.scroller1) {
  .onTouch(() => this.flag = true)
  .onScroll((x, y) => {
    if (this.flag) this.scroller2.scrollBy(x, y)
  })
}
Scroll(this.scroller2) {
  .onTouch(() => this.flag = false)
  .onScroll((x, y) => {
    if (!this.flag) this.scroller1.scrollBy(x, y)
  })
}

更多关于HarmonyOS 鸿蒙Next 两个Scroll互相监听彼此的滑动-卡顿问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


真的成功了!请问一下,这是为啥呀!为什么一个判断可以解决这样的问题!很好奇!(原谅我的基础差),

发现个新的,问题,当一个手指在向左滑动scroller1的时候,另一个手去滑动scroller2,两个动作同时进行,会出现问题,

不判断的话,有个递归调用问题:

①手指滑动 Scroll1

②触发 Scroll1 的 onScroll

③调用 scroller2.scrollBy 滑动 Scroll2

④触发 Scroll2 的 onScroll

⑤调用 scroller1.scrollBy 滑动 Scroll1

这里⑤又会触发②,会一直循环,导致爆栈,就是你上面发的报错 [Error message: Stack overflow!]

所以加个标记flag:

flag=true 代表手指在滑动 Scroll1,不用再用 scroller1.scrollBy 滑动 Scroll1 了;

flag=false 代表手指在滑动 Scroll2,不用再用 scroller2.scrollBy 滑动 Scroll2 了;

  • 这个 flag 名字改为 isTouchScroll1OrScroll2 会更直观一点

感谢感谢,明白了!刚刚去查了一下和您说的意思一样,但是很官方,还是您解释的更容易接受,谢谢!谢谢!

的确好简单啊 收藏了

scroller: Scroller = new Scroller().Scroll() {}.onScroll((x, y) => this.scroller.scrollBy(x,y)).Scroll(this.scroller) {}

如果给两个Scroll都绑定这个方法,那么就会报错了

哥!出事啦!scrool里面套的数据量太大,崩溃啊,现在想实现使用两个list互相监听滚动,遇到瓶颈啦,您有帮我看看我的第一条帖子好嘛?

https://developer.huawei.com/consumer/cn/forum/topic/0201145127512319746?fid=0102683795438680754

解决啦,哥,打扰啦,

在HarmonyOS鸿蒙Next中,两个Scroll组件互相监听彼此的滑动时,可能会出现卡顿问题。这通常是由于频繁的滑动事件触发和相互监听导致的性能瓶颈。Scroll组件的滑动事件会触发大量的回调,如果两个Scroll组件互相监听,会导致事件循环频繁触发,增加系统负担,从而引发卡顿。

解决该问题的关键在于优化滑动事件的监听和处理逻辑。可以考虑以下几种方式:

  1. 事件防抖:在滑动事件触发时,设置一个时间阈值,只有在超过该阈值后才执行回调,减少不必要的频繁触发。

  2. 事件节流:限制滑动事件的触发频率,例如每隔一定时间才执行一次回调,避免短时间内多次触发。

  3. 分离监听逻辑:将两个Scroll组件的监听逻辑分离,避免相互依赖。可以通过状态管理或中间层来处理滑动事件,减少直接交互。

  4. 异步处理:将滑动事件的处理逻辑放到异步任务中执行,避免阻塞主线程,提升响应速度。

  5. 优化布局:确保Scroll组件的布局合理,避免嵌套过多复杂组件,减少渲染负担。

通过这些优化手段,可以有效缓解两个Scroll组件互相监听滑动时的卡顿问题,提升用户体验。

回到顶部