【每日学点HarmonyOS Next知识】web滚动、事件回调、selectable属性、监听H5内部router、Grid嵌套时高度设置

news2025/3/7 1:59:58

【每日学点HarmonyOS Next知识】web滚动、事件回调、selectable属性、监听H5内部router、Grid嵌套时高度设置

1、HarmonyOS WebView加载url无法滚动?

scroll 里面嵌套webView,demo参考:

// xxx.ets
import web_webview from '@ohos.web.webview'

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  @State mode: WebLayoutMode = WebLayoutMode.FIT_CONTENT

  build() {
    Column() {
      Text("这里是头部区域")
        .width("100%")
        .height('30%')
        .backgroundColor("#f89f0f")
        .fontSize(28)
        .fontColor("#FF0F0F")
      Web({ src: $rawfile('Index.html'), controller: this.controller })
        .width('100%')
        .height(200)// .layoutMode(this.mode)
        .zoomAccess(false)
        .domStorageAccess(true)
        .overviewModeAccess(true)
        .imageAccess(true)
        .onlineImageAccess(true)
        .fileAccess(true)
        .databaseAccess(true)
      Text("这里是底部区域")
        .fontSize(28)
        .fontColor("#FF0F0F")
        .width("100%")
        .height('40%')
        .backgroundColor("#f89f0f")
    }
    .width('100%')
    .height('100%')
  }
}
2、HarmonyOS 事件回调?

有两个页面,A、B,在A中通过router.pushUrl方法跳转至B页面。B页面有一个按钮btn,点击btn时,如何将btn的触发事件告知A页面。B页面从始至终不进行back(返回)。

使用自定义订阅事件的方式来实现该功能:参考demo:

//index.ets
import display from '@ohos.display';
import emitter from '@ohos.events.emitter';
import { router } from '@kit.ArkUI';
import { JSON } from '@kit.ArkTS';

@Entry
@Component
struct DisplayTest {

  build() {
    Column({space:20}){
      Button('Test')
        .type(ButtonType.Capsule)
        .onClick(() => {
          let innerEvent: emitter.InnerEvent = {
            eventId: 12222
          };
          //触发id为12222的事件
          emitter.on(innerEvent, (data) => {
            console.info('once callback' + JSON.stringify(data));
          });
          router.pushUrl({
            url:'pages/PageOne'
          })
        })
        .width('50%')
    }
    .width("100%")
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

//PageOne.ets
import emitter from '@ohos.events.emitter';

@Entry
@Component
struct PageOne {



  build() {
    Column(){
      Text('PageOne')
        .width('50%')
      Button('send')
        .type(ButtonType.Capsule)
        .width('50%')
        .onClick(() => {
          let eventData: emitter.EventData = {
            data: {
              "content": "c",
              "id": 1,
            }
          };

          let innerEvent: emitter.InnerEvent = {
            eventId: 12222,
            priority: emitter.EventPriority.HIGH
          };
          //发布id为12222的事件
          emitter.emit(innerEvent, eventData);
        })
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }
}
3、HarmonyOS ListItem里面的属性selectable是干嘛用的?

ListItem的selectable属性为当前ListItem元素是否可以被鼠标框选,并不能使用此属性实现多选功能开发者可以根据动态属性设置attributeModifier来维护管理多选状态,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-attribute-modifier-V5

动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。

4、HarmonyOS web组件如何监听h5内部的router跳转?

需要拦截web组件内部的h5路由跳转进行参数的处理,请问有方法拦截吗

1、用于拦截url并返回响应数据:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5
2、用于判断是否阻止此次访问:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onloadintercept10

5、HarmonyOS Scroll中嵌套Grid组件的时候,Grid必须要设置height高度吗?

Scroll中嵌套Grid组件的时候,Grid必须要设置height高度吗

Grid的宽高没有设置时,默认适应父组件尺寸。 将 代码中Grid的父组件(Column)的宽高设置下比如: .width(“100%”) .height(“100%”)我这边是可以正常显示出来的。

参考demo:

@Entry
@Component
export struct AllChannelsPage{

  @State tabs: Array<String> = new Array();

  @State dragChannel: string = 'drag';

  private deviceWidth: number = (AppStorage.get('deviceWidth') as number)
  @State itemWidth: number = 80;
  @State itemHeight: number = 80;
  @State mineRowCount: number = 1;
  @State mineGridHeight: number = 100;
  @State mainTitieDes: string = '点击进入频道';

  aboutToAppear(): void {
    for(let i = 0; i < 30; i++ ){
      this.tabs.push('频道' + i);
    }
    this.itemWidth = (this.deviceWidth - 32 - 30)/4;
    this.itemHeight = this.itemWidth / 2.1;
    this.mineRowCount = Math.ceil(this.tabs.length / 4);
    this.mineGridHeight = this.mineRowCount * this.itemHeight + (this.mineRowCount - 1) * 10
  }

  @Builder pixelMapBuilder() { //拖拽过程样式
    Column() {
      Text(this.dragChannel)
        .fontSize('15fp')
          // .fontColor($r('app.color.color202022'))
        .textAlign(TextAlign.Center)
        .width(this.itemWidth)
        .height(this.itemHeight)
          // .backgroundColor($r('app.color.colorF9F9F9'))
        .borderRadius(4)
    }
  }

  changeIndex(index1: number, index2: number) { //交换数组位置
    let temp = this.tabs[index1];
    this.tabs[index1] = this.tabs[index2];
    this.tabs[index2] = temp;
  }

  build() {
    NavDestination(){
      Column(){
        Scroll(){
          Column(){
            Row(){
              Text().width(4).height(16)
                // .backgroundColor($r('app.color.colorF21333'))
                .borderRadius(2)
              Blank().width(6)
              Text('我的频道').fontSize('16fp')
              // .fontColor($r('app.color.color202022'))
              Blank().width(8)
              Text(this.mainTitieDes).fontSize('12fp')
              // .fontColor($r('app.color.colorB1B1BB'))
              Blank().layoutWeight(1)
              Text('重置').fontSize('15fp')
              // .fontColor($r('app.color.color909099'))
              Text().width(1).height(10)
                // .backgroundColor($r('app.color.color909099'))
                .margin({left: 4, right: 4})
              Text('编辑').fontSize('15fp')
              // .fontColor($r('app.color.colorF21333'))
            }.width('100%')
            .margin({top: 5, bottom: 15})
            .padding({ left: 16, right: 16 })

            Grid() {
              ForEach(this.tabs, (channel: string) => {
                GridItem() {
                  Text(channel)
                    .fontSize((channel?? '').length > 5 ? '11fp': '15fp')
                      // .fontColor($r('app.color.color202022'))
                    .textAlign(TextAlign.Center)
                      // .width(this.itemWidth)
                      // .height(this.itemHeight)
                    .width('100%')
                    .height(80)
                      // .backgroundColor($r('app.color.colorF9F9F9'))
                    .borderRadius(4)
                  // .onTouch((event: TouchEvent) => {
                  //   if (event.type === TouchType.Up) {
                  //     this.dragChannel = channel.channelName ?? '';
                  //   }
                  // })
                }
              })
            }
            .columnsTemplate('1fr 1fr 1fr 1fr')
            .columnsGap(10)
            .rowsGap(10)
            .onScrollIndex((first: number) => {
              console.info(first.toString());
            })
            // .width('100%')
            // .height('80%')
            .padding({ left: 16, right: 16 })
            .supportAnimation(true)
            .editMode(true) //设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem
            .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
              return this.pixelMapBuilder(); //设置拖拽过程中显示的图片。
            })
            .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。
              console.info('tag' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
              this.changeIndex(itemIndex, insertIndex)
            })
            .nestedScroll({
              scrollForward: NestedScrollMode.PARENT_FIRST,
              scrollBackward: NestedScrollMode.SELF_FIRST
            })

            Text().width('100%').height(500)
          }
          .width("100%")
          .height("100%")
        }
        .width('100%')
        .layoutWeight(1)

      }

    }.hideTitleBar(true)
  }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacBook上API调⽤⼯具推荐

在当今的软件开发中&#xff0c;API调用工具已经成为了开发者不可或缺的助手。无论是前端、后端还是全栈开发&#xff0c;API的调试、测试和管理都是日常工作中的重要环节。想象一下&#xff0c;如果没有这些工具&#xff0c;开发者可能需要手动编写复杂的CURL命令&#xff0c;…

【数据结构】LRUCache|并查集

目录 一、LRUCache 1.概念 2.实现:哈希表双向链表 3.JDK中类似LRUCahe的数据结构LinkedHashMap &#x1f525;4.OJ练习 二、并查集 1. 并查集原理 2.并查集代码实现 3.并查集OJ 一、LRUCache 1.概念 最近最少使用的&#xff0c;一直Cache替换算法 LRU是Least Recent…

初识Qt · 信号与槽 · 基础知识

目录 前言&#xff1a; 信号和槽初识 两个问题 前言&#xff1a; 本文我们正式开始介绍信号与槽这个概念&#xff0c;在谈及Qt中的信号与槽这个概念之前&#xff0c;我们不妨回顾一下Linux中的信号&#xff0c;比如发生了除0错误&#xff0c;OS就会给该进程发送一个信号&am…

Java高频面试之集合-03

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;说说ArrayList和LinkedList的区别 ArrayList 与 LinkedList 的详细对比 一、底层数据结构 特性ArrayListLinkedList存…

宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪

2025年3月5日&#xff0c;机器人行业龙头宇树科技&#xff08;Unitree&#xff09;在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司&#xff0c;聚焦智能机器人研发与销售&#xff0c;标志着宇树科技在华南市场的战…

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景&#xff1a; 已经用这个脚本的记得设置Wifi时候&#xff0c;关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开&#xff0c;一天要重新连接&#xff0c;点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本&#xff0c;那样我就可以解放双手&…

计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理

华为w515麒麟芯片版&#xff0c;还有非麒麟芯片版本&#xff0c;是一款信创电脑&#xff0c;一般安装的UOS系统。 准备一个空U盘&#xff0c;先下载镜像文件及启动盘制作工具&#xff0c;连接如下&#xff1a; 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…

Vue+el-upload配置minIO实现大文件的切片并发上传、上传进度展示、失败重试功能

vue3el-upload实现切片上传 效果图 初始界面 上传中的界面 上传完成的界面 上传失败的界面 <template><div><el-uploadclass"BigFileUpload"ref"uploadRef"action"#"drag:show-file-list"false":on-change"…

正则表达式梳理(基于python)

正则表达式&#xff08;regular expression&#xff09;是一种针对字符串匹配查找所定义的规则模式&#xff0c;独立于语言&#xff0c;但不同语言在实现上也会存在一些细微差别&#xff0c;下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…

【数据库】关系代数

关系代数 一、关系代数的概念二、关系代数的运算2.1 并、差、交2.2 投影、选择2.3 笛卡尔积2.4 连接2.5 重命名2.6 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象&#xff1a;关系运算符&#xff1a;4类运算结果&#xff1a;…

ubuntu20 安装python2

1. 确保启用了 Universe 仓库 在某些情况下&#xff0c;python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表&#xff1a; bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装&#xff1a; bash复制…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

最新Spring Security实战教程(一)初识Spring Security安全框架

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时&#xff0c;你是否也这样崩溃过&#xff1f; &#x1f621; npm install卡在node-sass半小时不动&#x1f62d; git clone到90%突然fatal: early EOF&#x1f92c; 改了半天hosts文件&#xff0c;第二天又失效了... 根本原因&#xff1a;传统代理需要复杂…

Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP

原题链接&#xff1a; Leetcode 1477. 找两个和为目标值且不重叠的子数组 class Solution { public:int minSumOfLengths(vector<int>& arr, int target) {int narr.size();int sum0;int maxnINT_MAX;vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求…

R语言绘图:韦恩图

韦恩分析 韦恩分析&#xff08;Venn Analysis&#xff09;常用于可视化不同数据集之间的交集和并集。维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图、温氏图、韦恩图、范氏图&#xff0c;用于显示元素集合重叠区域的关系型图表&#xff0c;通过图形与图形…