【每日学点鸿蒙知识】Web嵌套滚动体验、拷贝传递 ArrayBuffer异常问题、ObjectLink 的属性传递、构建读取参数

1、HarmonyOS Web嵌套滚动体验差?

商品详情页,嵌套滚动的时候父容器往下滑的过程中,惯性传不到WebView里面,但是从webView往上滑的时候,惯性能传递到父布局。

复制代码
import web_webview from '@ohos.web.webview';

@Entry
@Component
export struct WebScrollerDemo {
  private scrollTouchDown: boolean = false;
  private webTouchDown: boolean = false;
  private scrolling: boolean = false;
  private scroller: Scroller = new Scroller()
  controller: web_webview.WebviewController = new web_webview.WebviewController();

  build() {
    Scroll(this.scroller) {
      Column() {
        Text("Scroll Area")
          .width("100%")
          .height(400)
          .backgroundColor(0X330000FF)
          .fontSize(16)
          .textAlign(TextAlign.Center)
        Web({
          controller: this.controller,
          src: "https://www.huawei.com/s?id=1778113237500106256&wfr=spider&for=pc",
        }).height("100%").width("100%")
          .nestedScroll({
            scrollForward: NestedScrollMode.PARENT_FIRST,
            scrollBackward: NestedScrollMode.SELF_FIRST
          })
          .onTouch((event: TouchEvent) => {
            if (event.type == TouchType.Down) {
              this.webTouchDown = true;
            } else if (event.type == TouchType.Up) {
              this.webTouchDown = false;
            }
          })
      }.width("100%")
    }
    .onTouch((event: TouchEvent) => {
      if (event.type == TouchType.Down) {
        this.scrollTouchDown = true;
      } else if (event.type == TouchType.Up) {
        this.scrollTouchDown = false;
      }
    })
    .onScrollFrameBegin((offset: number, state: ScrollState) => {
      let yOffset: number = this.scroller.currentOffset().yOffset
      if (this.scrolling && offset > 0) {
        if (yOffset >= 400) { // 400为上面Text组件高度
          this.controller.scrollBy(0, offset)
          return { offsetRemain: 0 }
        } else if (yOffset + offset > 400) {
          this.controller.scrollBy(0, yOffset + offset - 400)
          return { offsetRemain: 400 - yOffset }
        }
      }
      return { offsetRemain: offset }
    })
    .onScrollStart(() => {
      if (this.scrollTouchDown && !this.webTouchDown) {
        this.scrolling = true;
      }
    })
    .onScrollStop(() => {
      this.scrolling = false;
    })
    .edgeEffect(EdgeEffect.Spring)
    .backgroundColor('#DCDCDC')
    .scrollBar(BarState.On)
    .width('100%')
    .height('100%')
  }
}
2、HarmonyOS taskpool.SequenceRunner 拷贝传递 ArrayBuffer 出现异常?

利用 ImageReceiver 从摄像头获取帧 ArrayBuffer,然后将 ArrayBuffer 传入线程池做耗时算法分析。由于 ArrayBuffer 后续还需要使用,所以设置了 setCloneList 希望拷贝传递。代码如下:

复制代码
private runner: taskpool.SequenceRunner = new taskpool.SequenceRunner();

let task = new taskpool.Task(run, buffer, width, height);
task.setCloneList([buffer]);
let result = await this.runner.execute(task);

发现报如下错误:10200006 An exception occurred during serialization, taskpool: failed to serialize arguments.

如果注释掉@Concurrent,就会报10200006 An exception occurred during serialization, taskpool: failed to serialize arguments.

复制代码
import taskpool from '@ohos.taskpool';

@Concurrent
function printArgs(args: number): number {
  console.info("printArgs: " + args);
  return args;
}

taskpool.execute(printArgs, 100).then((value: Object) => { // 100: test number
  console.info("taskpool result: " + value);
});

ObjectLink 的属性怎么传递给子组件

参考下ObjectLink的文档,直接在子组件中用ObjectLink修饰你需要的数据:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-observed-and-objectlink-V5#观察变化

4、HarmonyOSApp构建是否可以区分读取脚本参数并将脚本参数注入到BuildProfile文件中?

App构建需要区分多环境,目前依赖配置多个Target并在target上配置buildProfileField字段来区别 是否可以配置构建脚本,读取shell参数将shell参数注入到代码构建中,像xxxx构建的Gradle一样写Groovy语言,构建时动态修改构建脚本,注入不同参数值

可以通过hook以及插件上下文实现动态配置,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-config-ohos-guide-V5

5、HarmonyOS Web组件grayscale属性设置未能生效?

设置了web组件的grayscale属性,用于为当前组件添加灰度效果,经过测试未能产生效果。

复制代码
import web_webview from '@ohos.web.webview'

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController()

  build() {
    Column() {
      Web({ src: 'www.huawei.com', controller: this.controller })
        .grayscale(0.5)
    }
  }
}
相关推荐
澄江静如练_几秒前
小程序 存存上下滑动的页面
前端·javascript·vue.js
互联网搬砖老肖16 分钟前
Web 架构之会话保持深度解析
前端·架构
菜鸟una23 分钟前
【taro3 + vue3 + webpack4】在微信小程序中的请求封装及使用
前端·vue.js·微信小程序·小程序·typescript·taro
hao_041334 分钟前
elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析
前端
狂野小青年1 小时前
npm 报错 gyp verb `which` failed Error: not found: python2 解决方案
前端·npm·node.js
鲁鲁5171 小时前
Windows 环境下安装 Node 和 npm
前端·npm·node.js
跑调却靠谱2 小时前
elementUI调整滚动条高度后与固定列冲突问题解决
前端·vue.js·elementui
呵呵哒( ̄▽ ̄)"2 小时前
React - 编写选择礼物组件
前端·javascript·react.js
Coding的叶子2 小时前
React Flow 简介:构建交互式流程图的最佳工具
前端·react.js·流程图·fgai·react agent
特立独行的猫a6 小时前
HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(一、开篇,项目介绍)
人工智能·华为·harmonyos·古诗词