HarmonyOS 鸿蒙Next 如何解决Scroll组件嵌套Web组件滑动冲突问题 鸿蒙场景化案例

发布于 1周前 作者 yuanlaile 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何解决Scroll组件嵌套Web组件滑动冲突问题 鸿蒙场景化案例

【问题现象】

Scroll组件嵌套Web组件滑动冲突,导致Scroll无法上下滑动。

【背景知识】

触摸测试控制可以设置不同的触摸测试响应模式,影响组件的触摸测试收集结果,最终影响后续的触屏事件分发。

【解决方案】

Web组件和Scroll组件在同一页面时,会存在web获取焦点,导致Scroll无法上下滑动。

解决思路是可以通过设置边界调节来屏蔽其中一个的滑动响应来实现避免冲突的效果。

方案一:屏蔽web响应

可以在Scroll的onScroll事件中增加判断,在Scroll滑动到底部之前屏蔽所有Web响应,不过需要注意的是,如果Web本身也需要滑动的话,该方法不太适用,这种场景下可以使用方案二来处理冲突。

代码示例如下:

private scroller: Scroller = new Scroller();
[@State](/user/State) webEnable: boolean = false
Scroll(this.scroller){
  Web().enable(this.webEnable)
}.onScroll(() => {
  if (this.scroller.isAtEnd()) {
    this.webEnable = true
  } else {
    this.webEnable = false
  }
})
 

方案二:触摸事件传递

可以使用触摸测试控制来规避此种情况,请给显示在上层的节点设置hitTestBehavior为HitTestMode.BLock。详情见参考文档

代码示例如下:

Scroll(){
  Web({ src:$rawfile("index.htmL"),controller: this.webviewController})
    .width("100%")
    .height(220)
}.hitTestBehavior(HitTestMode.BLock)
1 回复

针对HarmonyOS 鸿蒙Next中Scroll组件嵌套Web组件滑动冲突问题,可以采取以下措施解决:

  1. 禁用子组件滚动:在Scroll组件中嵌套Web组件时,禁用Web组件的滚动手势,确保滚动手势由Scroll父组件统一处理。这可以通过设置Web组件的滚动属性或监听手势事件并返回拒绝结果来实现。
  2. 配置nestedScroll属性:设置Web组件的nestedScroll属性,并合理配置scrollForward和scrollBackward等滚动行为,以支持嵌套滚动。推荐使用子组件优先模式(NestedScrollMode.SELF_FIRST)或根据具体需求选择其他模式。
  3. 确保Web组件自适应:设置Web组件的layoutMode为WebLayoutMode.FIT_CONTENT,使Web组件的大小根据页面内容自适应变化。同时,确保Web组件有明确的宽度设置,以避免Scroll组件高度计算错误。
  4. 动态调整尺寸:通过javaScriptOnDocumentStart注入JavaScript,确保在页面加载完成后执行特定的JavaScript代码,如动态调整Web组件的尺寸,以适应内容变化。

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

回到顶部