自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS ArkUI之自定義組件側(cè)滑菜單(JS)

開發(fā) 前端 OpenHarmony
鴻蒙這次API7更新除了新增TS聲明式開發(fā)之外,還有JS開發(fā)也增加了很多API,JS開發(fā)自定義組件越來越方便了。本文介紹最新出的插槽用法,實現(xiàn)側(cè)滑菜單、支持兩種風(fēng)格、支持快速滑動打開關(guān)閉。

[[436367]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

鴻蒙這次API7更新除了新增TS聲明式開發(fā)之外,還有JS開發(fā)也增加了很多API,JS開發(fā)自定義組件越來越方便了。

本項目基于ArkUI中JS擴展的類Web開發(fā)范式,關(guān)于語法和概念直接看官網(wǎng)官方文檔地址:

基于JS擴展的類Web開發(fā)范式1 基于JS擴展的類Web開發(fā)范式2

本文介紹最新出的插槽用法,實現(xiàn)側(cè)滑菜單、支持兩種風(fēng)格、支持快速滑動打開關(guān)閉。

ArKUI系列文章

  • 【HarmonyOS ArkUI之仿微信朋友圈圖片預(yù)覽】
  • 【HarmonyOS ArkUI之仿微信圖片選擇】
  • 【HarmonyOS ArkUI之自定義組件側(cè)滑菜單(JS)】

效果演示

風(fēng)格一:內(nèi)容頁在菜單上面風(fēng)格二:內(nèi)容頁在菜單下面

HarmonyOS ArkUI之自定義組件側(cè)滑菜單(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)HarmonyOS ArkUI之自定義組件側(cè)滑菜單(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

主要知識點

觸摸事件、自定義組件父子組件傳遞參數(shù)、api=7新出的slot插槽

實現(xiàn)思路

自定義組件的邏輯都在此目錄下:entry/js/default/pages/drawer

主要使用onTouch相關(guān)事件,滑動改變菜單布局或內(nèi)容布局的left偏移量,手指抬起使用動畫完成偏移量

1、onTouch相關(guān)事件

只貼出了關(guān)鍵代碼

  1.  /** 
  2.    * 觸摸按下 
  3.    */ 
  4.   onTouchStart(event) { 
  5.       // 記錄首次按下的x坐標(biāo) 
  6.       this.pressX = event.touches[0].localX 
  7.       // 記錄上次的x坐標(biāo) 
  8.       this.lastX = this.pressX 
  9. ..... 
  10.   }, 
  11.   /** 
  12.    * 觸摸移動 
  13.    */ 
  14.   onTouchMove(event) { 
  15.     // 當(dāng)前x坐標(biāo) 
  16.       let localX = event.touches[0].localX 
  17.       // 計算與上次的x坐標(biāo)的偏移量 
  18.       let offsetX = this.lastX - localX; 
  19.       // 記錄上次的x坐標(biāo) 
  20.       this.lastX = localX 
  21.       // 累計偏移量 
  22.       this.offsetLeft -= offsetX 
  23.        
  24.       // 設(shè)置偏移量的范圍 
  25.       ..... 
  26.   } 
  27.  
  28. ** 
  29.    * 觸摸抬起 
  30.    */ 
  31.   onTouchEnd(event) { 
  32.        
  33.       ...... 
  34.        
  35.       // 手指抬起,根據(jù)情況,判斷toX的值,也就是判斷關(guān)閉或開啟菜單的情況 
  36.       // 當(dāng)移動偏移量大于菜單一半寬度,完全打開菜單,否則反之 
  37.       if (this.offsetLeft > this.menuWidth / 2) { 
  38.           toX = this.menuWidth 
  39.       } else { 
  40.           toX = 0 
  41.       } 
  42.        
  43.       ...... 
  44.        
  45.       // 開啟動畫 
  46.         this.startAnimator(toX)       
  47.        
  48.   } 
  49.   /** 
  50.    * 開啟動畫 
  51.    */ 
  52.   startAnimator(toX) { 
  53.       // 設(shè)置動畫參數(shù) 
  54.       let options = { 
  55.           duration: ANIMATOR_DURATION, // 持續(xù)時長 
  56.           fill: 'forwards', // 啟停模式:保留在動畫結(jié)束狀態(tài) 
  57.           begin: this.offsetLeft, // 起始值 
  58.           end: toX // 結(jié)束值 
  59.       }; 
  60.       // 更新動畫參數(shù) 
  61.       this.animator.update(options) 
  62.       // 監(jiān)聽動畫值變化事件 
  63.       this.animator.onframe = (value) => { 
  64.           this.offsetLeft = value 
  65.           this.changeMenuOffsetLeft() 
  66.       } 
  67.       // 開啟動畫 
  68.       this.animator.play() 
  69.   }, 

2、showStyle

0 第一種樣式下,解決設(shè)置z-index之后菜單界面在內(nèi)容下面,但點擊事件卻還在內(nèi)容上面的問題。

初始化設(shè)置left偏移量

動畫結(jié)束,判斷菜單是否關(guān)閉,關(guān)閉直接設(shè)置菜單偏移量為負的菜單寬度

注意:目前使用插槽之后,預(yù)覽器不走生命周期方法:onShow。

  1. export default { 
  2.     // 使用外部傳入 
  3.     props: ['showStyle'],// 顯示樣式:0菜單在下面,1菜單在上面 
  4.       ...... 
  5.   } 
  6. ** 
  7.    * 界面顯示 
  8.    */ 
  9.   onShow() { 
  10.       ..... 
  11.     // 設(shè)置菜單偏移量為負的菜單寬度,為了解決z-index設(shè)置后,菜單界面到內(nèi)容下面, 
  12.       // 事件還停留到內(nèi)容上面,導(dǎo)致點擊菜單區(qū)域,響應(yīng)的還是菜單點擊事件 
  13.       this.menuOffsetLeft = -this.menuWidth 
  14.   } 

3、使用具名插槽封裝

  1. <div id="drawer-container" class="drawer-container" on:touchstart="onTouchStart" 
  2.      on:touchmove="onTouchMove" on:touchend="onTouchEnd"
  3.  
  4.     <div class="drawer-content" style="left : {{ showStyle == 0 ? offsetLeft : 0 }} px; 
  5.             z-index : {{ zIndexContent }};" on:click="closeMenu"> 
  6.  
  7.     <!--具名插槽,根據(jù)名稱加入對應(yīng)的插槽中--> 
  8.         <slot name="content"></slot> 
  9.          
  10.     </div> 
  11.  
  12.     <stack class="drawer-menu" style="z-index : {{ zIndexMenu }};"
  13.         <div class="drawer-menu-background" style="opacity : {{ menuBgOpacity }};"></div> 
  14.         <div style="width : {{ menuWidth }} px; height : 100%; 
  15.                 left : {{ menuOffsetLeft }} px;" on:click="clickMenu"> 
  16.  
  17.         <!--具名插槽,根據(jù)名稱加入對應(yīng)的插槽中--> 
  18.             <slot name="menu"></slot> 
  19.  
  20.         </div> 
  21.     </stack> 
  22.  
  23. </div> 

4、index頁面使用

  1. <!--引入自定義組件--> 
  2. <element name='drawer' src='../drawer/drawer.hml'></element> 
  3. <div class="container"
  4.     <!--通過傳值設(shè)置樣式--> 
  5.     <drawer show-style="0"
  6.         <!--根據(jù)名稱加入對應(yīng)的插槽中--> 
  7.         <div slot='content' class="content-layout"
  8.             <div class="title-bar"
  9.                 <text>主頁</text> 
  10.             </div> 
  11.             <div class="mainpage-content"
  12.                 <text class="content1">我是內(nèi)容頁面</text> 
  13.                 <text class="content2">V1.0.0</text> 
  14.                 <text class="content2">梁迪迪</text> 
  15.             </div> 
  16.         </div> 
  17.  
  18.         <div slot='menu' class="menu-layout"
  19.             <div class="my-info"
  20.                 <image src="common/images/head_photo.png"></image> 
  21.                 <text>登錄 | 注冊</text> 
  22.             </div> 
  23.             <div class="menu-content"
  24.                 <div for="{{ listMenu }}" tid="{{ $item.id }}" on:click="menuSkip({{ $item.name }})"
  25.                     <image src="{{ $item.icon }}"></image> 
  26.                     <text>{{ $item.name }}</text> 
  27.                 </div> 
  28.             </div> 
  29.         </div> 
  30.     </drawer> 
  31. </div> 

結(jié)尾

每天進步一點點、需要付出努力億點點。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-05-20 14:34:20

list組件鴻蒙操作系統(tǒng)

2022-07-06 20:24:08

ArkUI計時組件

2022-05-23 10:53:54

canvas柱狀圖鴻蒙

2021-11-01 10:21:36

鴻蒙HarmonyOS應(yīng)用

2015-07-20 15:14:19

側(cè)滑菜單功能多樣

2022-10-09 15:13:18

TextPickerArkUI eTS

2022-10-10 14:51:51

ArkUI eTSPieChart組件

2015-02-12 15:33:43

微信SDK

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統(tǒng)

2022-10-25 15:12:24

自定義組件鴻蒙

2022-10-26 15:54:46

canvas組件鴻蒙

2015-02-12 15:38:26

微信SDK

2022-06-20 15:43:45

switch開關(guān)鴻蒙

2021-09-15 10:19:15

鴻蒙HarmonyOS應(yīng)用

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2022-05-26 14:50:15

ArkUITS擴展

2022-06-30 14:02:07

鴻蒙開發(fā)消息彈窗組件

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2022-02-16 16:09:12

鴻蒙游戲操作系統(tǒng)

2022-07-12 16:56:48

自定義組件鴻蒙
點贊
收藏

51CTO技術(shù)棧公眾號