0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開(kāi)發(fā)案例:【W(wǎng)eb組件實(shí)現(xiàn)抽獎(jiǎng)】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-09 18:31 ? 次閱讀

介紹

本篇Codelab是基于ArkTS的聲明式開(kāi)發(fā)范式的樣例,主要介紹了Web組件如何加載本地和云端H5小程序。所加載的頁(yè)面是一個(gè)由HTML+CSS+JavaScript實(shí)現(xiàn)的完整小應(yīng)用。樣例主要包含以下功能:

  1. web組件加載H5頁(yè)面。
  2. ArkTS和H5頁(yè)面交互。

image

相關(guān)概念

  • [Web]:提供具有網(wǎng)頁(yè)顯示能力的Web組件。
  • [runJavaScript]:異步執(zhí)行JavaScript腳本,并通過(guò)回調(diào)方式返回腳本執(zhí)行的結(jié)果。

相關(guān)權(quán)限

本篇Codelab使用了在線網(wǎng)頁(yè),需要在配置文件module.json5文件里添加網(wǎng)絡(luò)權(quán)限:ohos.permission.INTERNET。

{
  "module": {
    "name": "entry",
    ...
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

約束與限制

本篇Codelab需要搭建服務(wù)端環(huán)境,服務(wù)端搭建流程如下:

  1. 搭建nodejs環(huán)境:本篇Codelab的服務(wù)端是基于nodejs實(shí)現(xiàn)的,需要安裝nodejs,如果您本地已有nodejs環(huán)境可以跳過(guò)此步驟。
    1. 檢查本地是否安裝nodejs:打開(kāi)命令行工具(如Windows系統(tǒng)的cmd和Mac電腦Terminal,這里以Windows為例),輸入node -v,如果可以看到版本信息,說(shuō)明已經(jīng)安裝nodejs。
    2. 如果本地沒(méi)有nodejs環(huán)境,您可以去nodejs官網(wǎng)上下載所需版本進(jìn)行安裝配置。
    3. 配置完環(huán)境變量后,重新打開(kāi)命令行工具,輸入node -v,如果可以看到版本信息,說(shuō)明已安裝成功。
  2. 運(yùn)行服務(wù)端代碼:在本項(xiàng)目的HttpServerOfWeb目錄下打開(kāi)命令行工具,輸入npm install 安裝服務(wù)端依賴包,安裝成功后輸入npm start點(diǎn)擊回車??吹健胺?wù)器啟動(dòng)成功!"則表示服務(wù)端已經(jīng)在正常運(yùn)行。
  3. 構(gòu)建局域網(wǎng)環(huán)境:測(cè)試本Codelab時(shí)要確保運(yùn)行服務(wù)端代碼的電腦和測(cè)試機(jī)連接的是同一局域網(wǎng)下的網(wǎng)絡(luò),您可以用您的手機(jī)開(kāi)一個(gè)個(gè)人熱點(diǎn),然后將測(cè)試機(jī)和運(yùn)行服務(wù)端代碼的電腦都連接您的手機(jī)熱點(diǎn)進(jìn)行測(cè)試。
  4. 連接服務(wù)器地址:打開(kāi)命令行工具,輸入ipconfig命令查看本地ip,將本地ip地址復(fù)制到entry/src/main/ets/common/constants/Constants.ets文件下的23行,注意只替換ip地址部分,不要修改端口號(hào),保存好ip之后即可運(yùn)行Codelab進(jìn)行測(cè)試。

環(huán)境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 開(kāi)發(fā)板類型:[潤(rùn)和RK3568開(kāi)發(fā)板]。
  • OpenHarmony系統(tǒng):3.2 Release。

環(huán)境搭建

完成本篇Codelab我們首先要完成開(kāi)發(fā)環(huán)境的搭建,本示例以RK3568開(kāi)發(fā)板為例,參照以下步驟進(jìn)行:

  1. [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進(jìn)制)。以3.2 Release版本為例:
  2. 搭建燒錄環(huán)境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開(kāi)發(fā)板的燒錄](méi)
  3. 搭建開(kāi)發(fā)環(huán)境。
    1. 開(kāi)始前請(qǐng)參考[工具準(zhǔn)備],完成DevEco Studio的安裝和開(kāi)發(fā)環(huán)境配置。
    2. 開(kāi)發(fā)環(huán)境配置完成后,請(qǐng)參考[使用工程向?qū)創(chuàng)建工程(模板選擇“Empty Ability”)。
    3. 工程創(chuàng)建完成后,選擇使用[真機(jī)進(jìn)行調(diào)測(cè)]。
    4. 鴻蒙開(kāi)發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

代碼結(jié)構(gòu)解讀

本篇Codelab只對(duì)核心代碼進(jìn)行講解,對(duì)于完整代碼,我們會(huì)在gitee中提供。

├──entry/src/main/ets        // 代碼區(qū)
│  ├──common
│  │  └──Constant.ets        // 常量類
│  ├──entryability            
│  │  └──EntryAbility.ts     // 程序入口類
│  └──pages
│     ├──MainPage.ets        // 主頁(yè)入口文件
│     └──WebPage.ets         // 抽獎(jiǎng)頁(yè)入口文件
├──entry/src/main/resources  
│  ├──base
│  │  ├──element             // 尺寸、顏色、文字等資源文件存放位置
│  │  ├──media               // 媒體資源存放位置
│  │  └──profile             // 頁(yè)面配置文件存放位置
│  ├──en_US                  // 國(guó)際化英文
│  ├──rawfile                // 本地html代碼存放位置 
│  └──zh_CN                  // 國(guó)際化中文
└──HttpServerOfWeb           // 服務(wù)端代碼

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789v直接拿`

搜狗高速瀏覽器截圖20240326151547.png

H5小程序

抽獎(jiǎng)小程序由HTML+CSS+JS實(shí)現(xiàn),HTML代碼使用無(wú)序列表實(shí)現(xiàn)抽獎(jiǎng)盤頁(yè)面布局:

< !-- index.html -- >
< div class="luckyDraw" >
    < !-- 使用無(wú)序列表實(shí)現(xiàn)抽獎(jiǎng)盤 -- >
    < ul id="prize" class="prizes" >
        ...
        < li class="prizes-li" >< img class="pic" onclick="startDraw()" src="#" >< /li >
    < /ul >
< /div >

CSS代碼設(shè)置抽獎(jiǎng)盤的樣式:

/* css/index.css */
/* 抽獎(jiǎng)列表 */
.prizes {
    width: 96.5%;
    height: 96.7%;
    position: absolute;
}
...
/* 點(diǎn)擊抽獎(jiǎng) */
.prizes li:nth-of-type(9) {
    width: 34.9%;
    height: 34.6%;
    ...
}
...

JS代碼實(shí)現(xiàn)抽獎(jiǎng)的業(yè)務(wù)邏輯,并返回抽獎(jiǎng)結(jié)果:

// js/index.js
function roll() {
  ...
  // 滿足轉(zhuǎn)圈數(shù)和指定位置就停止
  if (count >= totalCount && (prizesPosition + 1) === index) {
    clearTimeout(timer);
    isClick = true;
    speed = initSpeed;
    // 等待1s打開(kāi)彈窗
    timer = setTimeout(openDialog, 1000); 
  }
  ...
}

function startDraw() {
  ...
  if (isClick) {
    ...
    roll();
    isClick = false;
  }
}

function openDialog() {
  // confirm返回抽獎(jiǎng)結(jié)果
  confirm(prizesArr[prizesPosition]);
}

Web組件

啟動(dòng)應(yīng)用進(jìn)入首頁(yè),頁(yè)面提供兩個(gè)按鈕,分別對(duì)應(yīng)加載本地H5和加載云端H5,點(diǎn)擊按鈕跳轉(zhuǎn)到抽獎(jiǎng)頁(yè)面。

// 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') })
}

說(shuō)明: H5頁(yè)面本地存放在resources/rawfile目錄下,通過(guò)$rawfile()訪問(wèn);云端則存放在HttpServerOfWeb服務(wù)器上,開(kāi)發(fā)者可以根據(jù)約束與限制章節(jié)服務(wù)端搭建流程進(jìn)行服務(wù)器搭建。

抽獎(jiǎng)頁(yè)面主要是由“點(diǎn)擊抽獎(jiǎng)”按鈕和Web組件構(gòu)成。給“點(diǎn)擊抽獎(jiǎng)”按鈕綁定點(diǎn)擊事件,實(shí)現(xiàn)點(diǎn)擊按鈕調(diào)用H5頁(yè)面的JavaScript函數(shù),并且通過(guò)onConfirm回調(diào)返回抽獎(jiǎng)結(jié)果,在原生頁(yè)面彈窗顯示,完成ArkTS和H5的雙向交互。

// WebPage.ets
Column() {
  ...
  Web({ src: this.params['path'], controller: this.webController })
    ...
    // 網(wǎng)頁(yè)調(diào)用confirm()告警時(shí)觸發(fā)此回調(diào)
    .onConfirm((event) = > {
      // 彈窗顯示抽獎(jiǎng)結(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()');
    })
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1255

    瀏覽量

    69292
  • 組件
    +關(guān)注

    關(guān)注

    1

    文章

    503

    瀏覽量

    17786
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2302

    瀏覽量

    42689
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29962
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3635

    瀏覽量

    16061
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開(kāi)發(fā)案例:【使用List組件實(shí)現(xiàn)設(shè)置項(xiàng)】

    使用List組件、Toggle組件以及Router接口,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的設(shè)置頁(yè),點(diǎn)擊將跳轉(zhuǎn)到對(duì)應(yīng)的詳細(xì)設(shè)置頁(yè)面。
    的頭像 發(fā)表于 05-10 17:01 ?848次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【使用List<b class='flag-5'>組件</b><b class='flag-5'>實(shí)現(xiàn)</b>設(shè)置項(xiàng)】

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

    OpenHarmony ArkTS提供了豐富的接口和組件,開(kāi)發(fā)者可以根據(jù)實(shí)際場(chǎng)景和開(kāi)發(fā)需求,選用不同的組件和接口。
    的頭像 發(fā)表于 05-10 16:41 ?1229次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【使用List<b class='flag-5'>組件</b><b class='flag-5'>實(shí)現(xiàn)</b>商品列表】

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

    學(xué)習(xí)如何使用聲明式UI編程框架的基礎(chǔ)組件。本篇Codelab將會(huì)使用Image組件、Slider組件、Text組件共同實(shí)現(xiàn)一個(gè)可調(diào)節(jié)的風(fēng)車動(dòng)
    的頭像 發(fā)表于 05-10 16:01 ?630次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【基礎(chǔ)<b class='flag-5'>組件</b>Slider的使用】

    HarmonyOS開(kāi)發(fā)案例:【Web組件實(shí)戰(zhàn)】

    使用ArkTS語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的免登錄過(guò)程,向大家介紹基本的cookie管理操作。
    的頭像 發(fā)表于 04-28 17:30 ?1248次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【<b class='flag-5'>Web</b><b class='flag-5'>組件</b>實(shí)戰(zhàn)】

    HarmonyOS開(kāi)發(fā)案例:【常用組件與布局】

    HarmonyOS ArkUI提供了豐富多樣的UI組件,您可以使用這些組件輕松地編寫(xiě)出更加豐富、漂亮的界面。
    的頭像 發(fā)表于 05-09 18:20 ?1138次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【常用<b class='flag-5'>組件</b>與布局】

    HarmonyOS開(kāi)發(fā)案例:【抽獎(jiǎng)轉(zhuǎn)盤】

    基于畫(huà)布組件、顯式動(dòng)畫(huà),實(shí)現(xiàn)的一個(gè)自定義抽獎(jiǎng)圓形轉(zhuǎn)盤。
    的頭像 發(fā)表于 05-07 10:10 ?630次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【<b class='flag-5'>抽獎(jiǎng)</b>轉(zhuǎn)盤】

    使用WebView組件實(shí)現(xiàn)應(yīng)用與Web頁(yè)面間的通信

    1. 介紹開(kāi)發(fā)者如果需要在自己的應(yīng)用中嵌入Web頁(yè)面,可以通過(guò)WebView組件進(jìn)行開(kāi)發(fā)。WebView組件派生于通用
    發(fā)表于 08-26 10:39

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-Web組件開(kāi)發(fā)體驗(yàn)

    ;) }}}*附件:HarmonyOSOpenHarmony應(yīng)用開(kāi)發(fā)-Web組件開(kāi)發(fā)體驗(yàn).docx示例效果:參
    發(fā)表于 12-12 15:14

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-類Web開(kāi)發(fā)范式

    邏輯處理。UI組件與數(shù)據(jù)之間通過(guò)單向數(shù)據(jù)綁定的方式建立關(guān)聯(lián),當(dāng)數(shù)據(jù)發(fā)生變化時(shí),UI界面自動(dòng)觸發(fā)更新。此種開(kāi)發(fā)方式,更接近Web前端開(kāi)發(fā)者的使用習(xí)慣,快速將已有的
    發(fā)表于 01-18 19:15

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-聲明式開(kāi)發(fā)范式組件匯總

    組件是構(gòu)建頁(yè)面的核心,每個(gè)組件通過(guò)對(duì)數(shù)據(jù)和方法的簡(jiǎn)單封裝,實(shí)現(xiàn)獨(dú)立的可視、可交互功能單元。組件之間相互獨(dú)立,隨取隨用,也可以在需求相同的地方重復(fù)使用。聲明式
    發(fā)表于 01-19 11:14

    HarmonyOS—使用Web組件加載頁(yè)面

    ;/html> </html> 加載HTML格式的文本數(shù)據(jù) Web組件可以通過(guò)??loadData??接口實(shí)現(xiàn)加載HTML格式的文本數(shù)據(jù)。當(dāng)開(kāi)發(fā)者不需要加載整個(gè)頁(yè)面,
    發(fā)表于 08-31 17:51

    HarmonyOS 應(yīng)用開(kāi)發(fā) Web 組件基本屬性應(yīng)用和事件

    ;gt; </html> 加載HTML格式的文本數(shù)據(jù) Web組件可以通過(guò)??loadData??接口實(shí)現(xiàn)加載HTML格式的文本數(shù)據(jù)。當(dāng)開(kāi)發(fā)者不需要加載整個(gè)頁(yè)面,只需要顯示
    發(fā)表于 09-15 15:28

    華為開(kāi)發(fā)者分論壇HarmonyOS學(xué)生公開(kāi)課-OpenHarmony Codelabs開(kāi)發(fā)案

    2021華為開(kāi)發(fā)者分論壇HarmonyOS學(xué)生公開(kāi)課-OpenHarmony Codelabs開(kāi)發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?1874次閱讀
    華為<b class='flag-5'>開(kāi)發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學(xué)生公開(kāi)課-OpenHarmony Codelabs<b class='flag-5'>開(kāi)發(fā)案</b>例

    HarmonyOS開(kāi)發(fā)案例:【抽獎(jiǎng)轉(zhuǎn)盤】

    基于畫(huà)布組件、動(dòng)畫(huà)樣式,實(shí)現(xiàn)的一個(gè)自定義抽獎(jiǎng)圓形轉(zhuǎn)盤。
    的頭像 發(fā)表于 04-24 21:58 ?281次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【<b class='flag-5'>抽獎(jiǎng)</b>轉(zhuǎn)盤】

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

    基于switch組件和chart組件實(shí)現(xiàn)線形圖、占比圖、柱狀圖,并通過(guò)switch切換chart組件數(shù)據(jù)的動(dòng)靜態(tài)顯示。
    的頭像 發(fā)表于 04-25 20:58 ?537次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)案</b>例:【 switch、chart<b class='flag-5'>組件</b>的使用】