案例:Web组件抽奖案例

文章目录

  • 介绍
    • 相关概念
    • 相关权限
    • 约束与限制
    • 完整示例
  • 代码结构解读
  • H5小程序
  • Web组件
  • 总结

img

介绍

本篇Codelab是基于ArkTS的声明式开发范式的样例,主要介绍了Web组件如何加载本地和云端H5小程序。所加载的页面是由HTML+CSS+JavaScript实现的完整小应用。样例主要包含以下功能:

  1. Web组件加载H5页面。
  2. ArkTS和H5页面交互。

相关概念

  • Web:提供具有网页显示能力的Web组件。
  • runJavaScript:异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。
  • onConfirm:网页调用confirm()告警时触发此回调。本篇Codelab用于回显抽奖结果。

相关权限

本篇Codelab使用了在线网页,需要在配置文件module.json5里添加网络权限:ohos.permission.INTERNET。

约束与限制

本篇Codelab需要搭建服务端环境,服务端如何搭建将在代码工程目录的README中详细介绍,文档中不再赘述。

完整示例

gitee源码地址

源码下载

Web组件抽奖案例(ArkTS).zip

代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在源码下载或gitee中提供。

├──entry/src/main/ets        // 代码区
│  ├──common
│  │  └──Constant.ets        // 常量类
│  ├──entryability            
│  │  └──EntryAbility.ts     // 程序入口类
│  ├──pages
│  │  ├──MainPage.ets        // 主页入口文件
│  │  └──WebPage.ets         // 抽奖页入口文件
│  └──viewmodel                          
│     └──NavigatorModel.ets  // 导航model
├──entry/src/main/resources  
│  ├──base
│  │  ├──element             // 尺寸、颜色、文字等资源文件存放位置
│  │  ├──media               // 媒体资源存放位置
│  │  └──profile             // 页面配置文件存放位置
│  ├──en_US                  // 国际化英文
│  ├──rawfile                // 本地html代码存放位置 
│  └──zh_CN                  // 国际化中文
└──HttpServerOfWeb           // 服务端代码

H5小程序

<!-- index.html -->
<div class="luckyDraw"><!-- 使用无序列表实现抽奖盘 --><ul id="prize" class="prizes">...<li class="prizes-li"><img class="pic" onclick="startDraw()" src="#"></li></ul>
</div>

抽奖小程序由HTML+CSS+JS实现,HTML代码使用无序列表实现抽奖盘布局。

<!-- index.html -->
<div class="luckyDraw"><!-- 使用无序列表实现抽奖盘 --><ul id="prize" class="prizes">...<li class="prizes-li"><img class="pic" onclick="startDraw()" src="#"></li></ul>
</div>

CSS代码设置抽奖盘的样式。

/* css/index.css */
/* 抽奖列表 */
.prizes {width: 96.5%;height: 96.7%;position: absolute;
}
...
/* 点击抽奖 */
.prizes li:nth-of-type(9) {left: 34.9%;top: 34.6%;...
}
...

JS代码实现抽奖的业务逻辑,并返回抽奖结果。

// js/index.js
function roll() {...// 满足转圈数和指定位置就停止if (count >= totalCount && (prizesPosition + 1) === index) {clearTimeout(timer);isClick = true;speed = initSpeed;// 等待1s打开弹窗timer = setTimeout(openDialog, 1000); }...
}function startDraw() {...if (isClick) {...roll();isClick = false;}
}function openDialog() {// confirm返回抽奖结果confirm(prizesArr[prizesPosition]);
}

Web组件

img

启动应用进入首页,页面提供两个按钮,分别对应加载本地H5和加载云端H5,点击按钮跳转到抽奖页面。

// MainPage.ets
Column() {...Navigator({ target: WEB_PAGE_URI, type: NavigationType.Push }) {Button($r('app.string.loadLocalH5'))...}.params({ path: LOCAL_PATH, tips: $r('app.string.local') } as NavigatorModel)Navigator({ target: WEB_PAGE_URI, type: NavigationType.Push }) {Button($r('app.string.loadCloudH5'))...}.params({ path: CLOUD_PATH, tips: $r('app.string.online') } as NavigatorModel)
}

本地H5页面存放在resources/rawfile目录下,通过$rawfile()访问;云端H5页面则存放在HttpServerOfWeb服务器上,开发者可以根据代码工程目录README中服务端搭建流程进行服务器搭建。

img

抽奖页面主要是由“点击抽奖”按钮和Web组件构成。给“点击抽奖”按钮绑定点击事件,实现点击按钮调用H5页面的JavaScript函数,并且通过onConfirm回调返回抽奖结果。在原生页面弹窗显示,完成ArkTS和H5的双向交互。

// WebPage.ets
Column() {...Web({ src: this.params['path'], controller: this.webController })...// 网页调用confirm()告警时触发此回调.onConfirm((event) => {// 弹窗显示抽奖结果AlertDialog.show({message: WebConstant.WEB_ALERT_DIALOG_TEXT_VALUE + event?.message,...})return true;})...Column() {Text($r('app.string.textValue'))...Text(this.params['tips'])...}Button($r('app.string.btnValue'))....onClick(() => {// 异步执行JavaScript脚本this.webController.runJavaScript('startDraw()');})
}

总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. 使用Web组件加载H5页面。
  2. 使用ArkTS与H5页面进行交互。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

Mac M1 Parallels CentOS7.9 Install Jenkins

官网: https://www.jenkins.io/ 一、Install & Check Java Env Oracle官网下载Java: https://www.oracle.com/cn/ # 拷贝到Jenkins服务器 scp Downloads/jdk-8u391-linux-aarch64.tar.gz root10.211.55.34:~# 解压 mkdir -p /opt/java && tar -zxvf jdk-8u391-li…

类名.this:内部类引用外部类实例

类名.this是啥意思&#xff1f; 今天在看尚硅谷的课程时里面讲了这么一句话&#xff1a; 集合在遍历时需要先创建一个容器&#xff0c;存放集合的数据&#xff0c;这样做浪费内存 想去验证下&#xff0c;就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr&#xff08;…

Vue过滤器详解

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介基本用法多个过滤器的串联过滤器在指令中的应用全局过滤器 ⭐ 本期推荐 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&#xff01;创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每…

螺纹钢负公差轧制中的测径仪应用

1、负公差轧制意义 为了满足生产使用要求&#xff0c;并根据轧制水平&#xff0c;在产品标准冲规定钢材尺寸的波动范围&#xff0c;允许钢材的实际尺寸与公称尺之间有一定的偏差&#xff0c;这个偏差一般称公差&#xff0c;公差分正、负公差&#xff0c;钢材按负公差轧制时&…

selenium不自动关闭chrome,selenium hello world

selenium不自动关闭chrome 用visual studio的话&#xff0c;右键&#xff0c;在终端运行。 from selenium import webdriveroptions webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver webdriver.Chrome(optionsoptions) url …

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中&#xff0c;分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台&#xff0c;用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

Element-ui图片懒加载

核心代码 <el-image src"https://img-blog.csdnimg.cn/direct/2236deb5c315474884599d90a85d761d.png" alt"我是图片" lazy><img slot"error" src"https://img-blog.csdnimg.cn/direct/81bf096a0dff4e5fa58e5f43fd44dcc6.png&quo…

如何构建Prompt,帮我生成QA,作为召回率检索的测试集?

最近在做搜索召回率的提升工作。粮草未动兵马先行&#xff01;在做之前应该先有一把尺子来衡量召回率的好坏。所以应该先构建测试数据集&#xff0c;然后去做标准化测试。 有了测试机集以后。再去做搜索优化&#xff0c;才能看出来效果。 当然可以选择一些开源的测试集。如果可…

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问 前言1、创建仓库2、开启 gh-pages页面功能3、访问测试 前言 写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;使用小众第三方图床&#xff0c;怕不稳定和倒闭&…

流程控制详解

1、Java流程控制 主要涉及三大流程控制&#xff1a;顺序、分支、循环 如下图&#xff1a; 1&#xff09;流程2 存在对用户名和密码的校验&#xff0c;是否为空&#xff0c;存在分支控制 2&#xff09;流程3 用户名和密码在数据库是否存在&#xff0c;存在分支控制 3&#xf…

VS中动态库的创建和调用

VS中动态库的创建和调用 库 ​ 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态…