HarmonyOS 鸿蒙Next Web组件如何拿到其加载的内容的高度

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Web组件如何拿到其加载的内容的高度 我现在想要知道web组件的加载的内容的高度,注意是内容的高度,并非控件的高度。
然后我要怎么知道web组件能否向上和向下滚动
现在有个场景,就是我们的资讯详情页头部是web组件加载网页,底部是评论列表。我们需要去处理什么时候走web滚动,什么时候走list的滚动

2 回复

Web组件可以通过设置nestedScroll属性来实现向上和向下的滚动功能。可以使用nestedScroll.scrollForward和nestedScroll.scrollBackward来分别设置Web组件往末尾端滚动时的嵌套滚动选项,以及可滚动组件往起始端滚动时的嵌套滚动选项。这些属性支持自定义不同方向上的嵌套滚动模式,默认为NestedScrollMode.SELF_FIRST。

参考demo:

nestScrollForward:NestedScrollMode= NestedScrollMode.SELF_FIRST

@State nestScrollBackward:NestedScrollMode=NestedScrollMode.PARENT_FIRST

private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

aboutToAppear(): void {
 webview.WebviewController.setWebDebuggingAccess(true);
}

build() {
 Column() {
  List({ space: 20, initialIndex: 0 }) {
   ListItem() {
    Web({ src: $rawfile('Page240523195733036_short.html'), controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
     .javaScriptAccess(true)
     .layoutMode(WebLayoutMode.FIT_CONTENT)
     .nestedScroll({ scrollForward: this.nestScrollForward, scrollBackward: this.nestScrollBackward})
   }
   ForEach(this.arr, (item: number) => {
    ListItem() {
     Text('这是一条评论:' + item)
      .width('100%').height(100).fontSize(16)
      .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
    }
   }, (item: string) => item)
  }
  .listDirection(Axis.Vertical) // 排列方向
  .scrollBar(BarState.Off)
  .friction(0.6)
  .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
  .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
  .onScrollIndex((firstIndex: number, lastIndex: number, centerIndex: number) => {
   console.info('first' + firstIndex)
   console.info('last' + lastIndex)
   console.info('center' + centerIndex)
  })
  .width('100%')
 }
 .width('100%')
 .height('100%')
 .backgroundColor(0xDCDCDC)
 .padding({ top: 5 })
}

更多关于HarmonyOS 鸿蒙Next Web组件如何拿到其加载的内容的高度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next Web组件是一个用于嵌入Web内容的UI组件。要获取Next Web组件加载内容的高度,可以通过以下几种方式实现(不涉及Java或C语言):

  1. 使用组件提供的API:

    • 检查HarmonyOS SDK文档,看是否有提供获取Web内容高度的API。如果有,可以直接调用该API获取高度。
  2. 监听内容加载完成事件:

    • 监听Web组件的内容加载完成事件(如onLoadFinished),在事件触发后,通过组件提供的接口或方法尝试获取内容的高度。
  3. 通过DOM操作(如果允许):

    • 如果Next Web组件允许通过某种方式访问其内部的DOM,可以在内容加载完成后,通过JavaScript获取DOM元素的高度,并通过某种机制(如JS桥接)传递给鸿蒙应用。
  4. 布局测量:

    • 在Web内容加载完成后,利用鸿蒙的布局测量机制,对Web组件进行测量,获取其实际占据的高度。

请注意,具体实现方式可能依赖于HarmonyOS的版本和Next Web组件的具体实现。如果上述方法均不适用,可能是因为当前版本的HarmonyOS或Next Web组件未提供此类功能。

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

回到顶部