介紹
本篇Codelab是基于ArkTS的聲明式開發(fā)范式的樣例,主要介紹了Web組件如何加載本地和云端H5小程序。所加載的頁面是一個由HTML+CSS+JavaScript實現(xiàn)的完整小應(yīng)用。樣例主要包含以下功能:
- web組件加載H5頁面。
- ArkTS和H5頁面交互。
相關(guān)概念
- [Web]:提供具有網(wǎng)頁顯示能力的Web組件。
- [runJavaScript]:異步執(zhí)行JavaScript腳本,并通過回調(diào)方式返回腳本執(zhí)行的結(jié)果。
相關(guān)權(quán)限
本篇Codelab使用了在線網(wǎng)頁,需要在配置文件module.json5文件里添加網(wǎng)絡(luò)權(quán)限:ohos.permission.INTERNET。
{
"module": {
"name": "entry",
...
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
}
約束與限制
本篇Codelab需要搭建服務(wù)端環(huán)境,服務(wù)端搭建流程如下:
- 搭建nodejs環(huán)境:本篇Codelab的服務(wù)端是基于nodejs實現(xiàn)的,需要安裝nodejs,如果您本地已有nodejs環(huán)境可以跳過此步驟。
- 運(yùn)行服務(wù)端代碼:在本項目的HttpServerOfWeb目錄下打開命令行工具,輸入npm install 安裝服務(wù)端依賴包,安裝成功后輸入npm start點(diǎn)擊回車。看到“服務(wù)器啟動成功!"則表示服務(wù)端已經(jīng)在正常運(yùn)行。
- 構(gòu)建局域網(wǎng)環(huán)境:測試本Codelab時要確保運(yùn)行服務(wù)端代碼的電腦和測試機(jī)連接的是同一局域網(wǎng)下的網(wǎng)絡(luò),您可以用您的手機(jī)開一個個人熱點(diǎn),然后將測試機(jī)和運(yùn)行服務(wù)端代碼的電腦都連接您的手機(jī)熱點(diǎn)進(jìn)行測試。
- 連接服務(wù)器地址:打開命令行工具,輸入ipconfig命令查看本地ip,將本地ip地址復(fù)制到entry/src/main/ets/common/constants/Constants.ets文件下的23行,注意只替換ip地址部分,不要修改端口號,保存好ip之后即可運(yùn)行Codelab進(jìn)行測試。
環(huán)境搭建
軟件要求
- [DevEco Studio]版本:DevEco Studio 3.1 Release。
- OpenHarmony SDK版本:API version 9。
硬件要求
- 開發(fā)板類型:[潤和RK3568開發(fā)板]。
- OpenHarmony系統(tǒng):3.2 Release。
環(huán)境搭建
完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進(jìn)行:
- [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進(jìn)制)。以3.2 Release版本為例:
- 搭建燒錄環(huán)境。
- [完成DevEco Device Tool的安裝]
- [完成RK3568開發(fā)板的燒錄]
- 搭建開發(fā)環(huán)境。
代碼結(jié)構(gòu)解讀
本篇Codelab只對核心代碼進(jìn)行講解,對于完整代碼,我們會在gitee中提供。
├──entry/src/main/ets // 代碼區(qū)
│ ├──common
│ │ └──Constant.ets // 常量類
│ ├──entryability
│ │ └──EntryAbility.ts // 程序入口類
│ └──pages
│ ├──MainPage.ets // 主頁入口文件
│ └──WebPage.ets // 抽獎頁入口文件
├──entry/src/main/resources
│ ├──base
│ │ ├──element // 尺寸、顏色、文字等資源文件存放位置
│ │ ├──media // 媒體資源存放位置
│ │ └──profile // 頁面配置文件存放位置
│ ├──en_US // 國際化英文
│ ├──rawfile // 本地html代碼存放位置
│ └──zh_CN // 國際化中文
└──HttpServerOfWeb // 服務(wù)端代碼
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
H5小程序
抽獎小程序由HTML+CSS+JS實現(xiàn),HTML代碼使用無序列表實現(xiàn)抽獎盤頁面布局:
< !-- index.html -- >
< div class="luckyDraw" >
< !-- 使用無序列表實現(xiàn)抽獎盤 -- >
< ul id="prize" class="prizes" >
...
< li class="prizes-li" >< img class="pic" onclick="startDraw()" src="#" >< /li >
< /ul >
< /div >
CSS代碼設(shè)置抽獎盤的樣式:
/* css/index.css */
/* 抽獎列表 */
.prizes {
width: 96.5%;
height: 96.7%;
position: absolute;
}
...
/* 點(diǎn)擊抽獎 */
.prizes li:nth-of-type(9) {
width: 34.9%;
height: 34.6%;
...
}
...
JS代碼實現(xiàn)抽獎的業(yè)務(wù)邏輯,并返回抽獎結(jié)果:
// js/index.js
function roll() {
...
// 滿足轉(zhuǎn)圈數(shù)和指定位置就停止
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返回抽獎結(jié)果
confirm(prizesArr[prizesPosition]);
}
Web組件
啟動應(yīng)用進(jìn)入首頁,頁面提供兩個按鈕,分別對應(yīng)加載本地H5和加載云端H5,點(diǎn)擊按鈕跳轉(zhuǎn)到抽獎頁面。
// 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') })
Navigator({ target: WEB_PAGE_URI, type: NavigationType.Push }) {
Button($r('app.string.loadCloudH5'))
...
}
.params({ path: CLOUD_PATH, tips: $r('app.string.online') })
}
說明: H5頁面本地存放在resources/rawfile目錄下,通過$rawfile()訪問;云端則存放在HttpServerOfWeb服務(wù)器上,開發(fā)者可以根據(jù)約束與限制章節(jié)服務(wù)端搭建流程進(jìn)行服務(wù)器搭建。
抽獎頁面主要是由“點(diǎn)擊抽獎”按鈕和Web組件構(gòu)成。給“點(diǎn)擊抽獎”按鈕綁定點(diǎn)擊事件,實現(xiàn)點(diǎn)擊按鈕調(diào)用H5頁面的JavaScript函數(shù),并且通過onConfirm回調(diào)返回抽獎結(jié)果,在原生頁面彈窗顯示,完成ArkTS和H5的雙向交互。
// WebPage.ets
Column() {
...
Web({ src: this.params['path'], controller: this.webController })
...
// 網(wǎng)頁調(diào)用confirm()告警時觸發(fā)此回調(diào)
.onConfirm((event) = > {
// 彈窗顯示抽獎結(jié)果
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(() = > {
// 異步執(zhí)行JavaScript腳本
this.webController.runJavaScript('startDraw()');
})
}
審核編輯 黃宇
-
Web
+關(guān)注
關(guān)注
2文章
1281瀏覽量
70790 -
組件
+關(guān)注
關(guān)注
1文章
529瀏覽量
18291 -
鴻蒙
+關(guān)注
關(guān)注
59文章
2503瀏覽量
43762 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
2052瀏覽量
32109 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3820瀏覽量
18114
發(fā)布評論請先 登錄
HarmonyOS開發(fā)案例:【使用List組件實現(xiàn)設(shè)置項】

HarmonyOS開發(fā)案例:【使用List組件實現(xiàn)商品列表】

HarmonyOS開發(fā)案例:【基礎(chǔ)組件Slider的使用】

「極速探索HarmonyOS NEXT 」閱讀體驗】+Web組件
使用WebView組件實現(xiàn)應(yīng)用與Web頁面間的通信
HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Web組件開發(fā)體驗
HarmonyOS/OpenHarmony應(yīng)用開發(fā)-類Web開發(fā)范式
HarmonyOS—使用Web組件加載頁面
HarmonyOS 應(yīng)用開發(fā) Web 組件基本屬性應(yīng)用和事件
華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案例

HarmonyOS開發(fā)案例:【 switch、chart組件的使用】

評論