成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[436367]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

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

本項目基于ArkUI中JS擴展的類Web開發范式,關于語法和概念直接看官網官方文檔地址:

基于JS擴展的類Web開發范式1 基于JS擴展的類Web開發范式2

本文介紹最新出的插槽用法,實現側滑菜單、支持兩種風格、支持快速滑動打開關閉。

ArKUI系列文章

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

效果演示

風格一:內容頁在菜單上面風格二:內容頁在菜單下面

HarmonyOS ArkUI之自定義組件側滑菜單(JS)-鴻蒙HarmonyOS技術社區HarmonyOS ArkUI之自定義組件側滑菜單(JS)-鴻蒙HarmonyOS技術社區

主要知識點

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

實現思路

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

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

1、onTouch相關事件

只貼出了關鍵代碼

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

2、showStyle

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

初始化設置left偏移量

動畫結束,判斷菜單是否關閉,關閉直接設置菜單偏移量為負的菜單寬度

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

  1. export default { 
  2.     // 使用外部傳入 
  3.     props: ['showStyle'],// 顯示樣式:0菜單在下面,1菜單在上面 
  4.       ...... 
  5.   } 
  6. ** 
  7.    * 界面顯示 
  8.    */ 
  9.   onShow() { 
  10.       ..... 
  11.     // 設置菜單偏移量為負的菜單寬度,為了解決z-index設置后,菜單界面到內容下面, 
  12.       // 事件還停留到內容上面,導致點擊菜單區域,響應的還是菜單點擊事件 
  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.     <!--具名插槽,根據名稱加入對應的插槽中--> 
  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.         <!--具名插槽,根據名稱加入對應的插槽中--> 
  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.     <!--通過傳值設置樣式--> 
  5.     <drawer show-style="0"
  6.         <!--根據名稱加入對應的插槽中--> 
  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">我是內容頁面</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> 

結尾

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

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-05-20 14:34:20

list組件鴻蒙操作系統

2022-07-06 20:24:08

ArkUI計時組件

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2022-05-23 10:53:54

canvas柱狀圖鴻蒙

2015-07-20 15:14:19

側滑菜單功能多樣

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鴻蒙操作系統

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2022-05-26 14:50:15

ArkUITS擴展

2015-02-12 15:38:26

微信SDK

2022-06-20 15:43:45

switch開關鴻蒙

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2022-02-16 16:09:12

鴻蒙游戲操作系統

2022-07-12 16:56:48

自定義組件鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 好姑娘高清在线观看电影 | 久久久久网站 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 国产一级一级国产 | 日韩精品久久久久久 | 国产一区影院 | 欲色av| 性色av一区二区三区 | 亚洲精品久久国产高清情趣图文 | 91一区| 久久亚洲一区二区三区四区 | gav成人免费播放视频 | 青青久久久| 日韩在线| 337p日本欧洲亚洲大胆精蜜臀 | 日本精品一区二区三区在线观看视频 | 亚洲一区二区三区 | 国产97在线视频 | 中文在线www | 国产在线h| 欧美福利视频一区 | 久草视频在线播放 | www.操.com| 成人伊人 | av大片在线观看 | 免费一级大片 | 日韩欧美中文字幕在线观看 | 九色 在线 | 亚洲经典一区 | 欧美日韩综合精品 | 欧美日韩在线观看一区二区三区 | 国产成人免费在线 | 亚洲男人天堂 | 久久国产精品视频免费看 | 国产精品国产三级国产aⅴ入口 | 日本高清视频网站 | 国产综合久久久久久鬼色 | 国产黑丝av | 精品日韩一区二区 | 久久爱黑人激情av摘花 | 亚洲欧美一区二区三区在线 |