如何处理tabs嵌套web滑动场景

tabs组件嵌套web组件滚动场景会出现下面问题:

1、web页上下滑动的时候会误触发tab页翻页手势

2、tab页切换时web组件还可以上下滚动

HarmonyOS
2024-07-22 12:05:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

问题1:可以通过给web组件设置嵌套滚动nestedScroll属性解决

问题2:可以通过给web组件设置网页是否允许滚动setScrollable属性解决

参考代码:

import web_webview from '@ohos.web.webview'; 
import business_error from '@ohos.base'; 
 
@Component 
@Entry 
struct TabWebPage2 { 
  @State message: string = 'Hello World'; 
  private tabsController = new TabsController(); 
  private currentIndex: number = 0; 
  private webviewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Vertical }) 
  // 控制滑动页面进行页面切换 
  @State flag: boolean = true 
  build() { 
    Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) { 
      TabContent() { 
        Web({ src: 'https://m.xxx.com/', controller: this.webviewController })// 设置嵌套滚动 
          .nestedScroll({ 
            scrollForward: NestedScrollMode.PARENT_FIRST, 
            scrollBackward: NestedScrollMode.SELF_FIRST 
          }) 
      }.tabBar(this.tabBuilder('首页', 0)) 
 
      TabContent() { 
        Column() { 
          Text("发现") 
        }.width('100%').height('100%') 
      }.tabBar(this.tabBuilder('发现', 1)) 
 
      TabContent() { 
        Column() { 
          Text("推荐") 
        }.width('100%').height('100%') 
      }.tabBar(this.tabBuilder('推荐', 2)) 
 
      TabContent() { 
        Column() { 
          Text("我的") 
        }.width('100%').height('100%') 
      } 
      .tabBar(this.tabBuilder('我的', 3)) 
    } 
    .onChange((index: number) => { 
      this.currentIndex = index; 
    }) 
    .scrollable(this.flag) 
    .onAnimationStart((index: number, targetIndex: number, event: TabsAnimationEvent) => { 
    }) 
    .onAnimationEnd((index: number, event: TabsAnimationEvent) => { 
      // 切换动画结束时触发该回调,设置web组件可以滑动 
      this.webviewController.setScrollable(true) 
    }) 
    .onGestureSwipe((index: number, event: TabsAnimationEvent) => { 
      // 在页面跟手滑动过程中,逐帧触发该回调,设置tab页切换的时web页无法上下滑动 
      this.webviewController.setScrollable(false) 
    }) 
  } 
 
  @Builder 
  tabBuilder(title: string, targetIndex: number) { 
    Column() { 
      Text(title) 
        .fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B') 
    } 
    .width('100%') 
    .height(50) 
    .justifyContent(FlexAlign.Center) 
  } 
}
分享
微博
QQ
微信
回复
2024-07-22 19:52:45
相关问题
HarmonyOS TabsWeb嵌套左右滑动问题
92浏览 • 1回复 待解决
HarmonyOS Tabs组件嵌套滑动
71浏览 • 1回复 待解决
Tabs组件嵌套滑动组件
1135浏览 • 1回复 待解决
滑动嵌套事件冲突处理
91浏览 • 0回复 待解决
HarmonyOS list 嵌套web滑动切换问题
219浏览 • 1回复 待解决
有谁知道web拦截如何处理文件
687浏览 • 1回复 待解决
HarmonyOS 大整数如何处理
249浏览 • 1回复 待解决
HarmonyOS Tabs组件嵌套Tabs组件问题
390浏览 • 1回复 待解决
应用线程过多时如何处理
1730浏览 • 1回复 待解决
如何处理Redis的内存优化?
2649浏览 • 1回复 待解决