国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在鴻蒙上實現聊天列表滑動刪除功能

OpenHarmony技術社區 ? 來源:鴻蒙技術社區 ? 作者:鴻蒙技術社區 ? 2021-12-03 10:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本項目基于 ArkUI 中 TS 擴展的聲明式開發范式,關于語法和概念直接看官網。

基于 TS 擴展的聲明式開發范式 1

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-ts-overview-0000001192705715
基于 TS 擴展的聲明式開發范式 2
https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-framework-directory-0000001111581264

本文介紹列表滑動刪除:

  • 列表中只允許滑出其中一項

  • 如果有打開的項,點擊或滑動其他項都會關閉打開的項

  • 點擊刪除,刷新列表界面

主要知識點

可滑動的容器組件(Scroll):

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-container-scroll-0000001163543527

觸摸事件(onTouch):

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-universal-events-touch-0000001158261221

實現思路

我把界面精簡了一下,減少代碼量,幫助更好的理解主要邏輯。

①item 布局 主要使用 scroll 包裹內容,scroll 設置為橫向滑動。部分代碼如下:
.....
Scroll(){
Row(){
Text('內容數據')
.width('100%').height(65)

Button(){
Text('刪除')
}
.width(100).height(65)
}
}.scrollable(ScrollDirection.Horizontal)//設置為橫向滑動
.....
②Scroll 容器

給 Scroll 容器綁定滑動組件的控制器,只用到其中的一個方法:滑動到指定位置 scrollTo。

scrollTo(
value:{
xOffset:number|string,yOffset:number|string,animation?
:{duration:number,curve:Curve}
}
);
看源碼得知可以設置動畫時間,注意:時間目前好像不能設置 300 毫秒以上,往下設置可以。

部分代碼如下:

.....
//初始化控制器
privatescroller=newScroller()
Scroll(scroller){//控制器綁定到滑動容器中
Row(){
Text('內容數據')
.width('100%').height(65)

Button(){
Text('刪除')
}
.width(100).height(65)
}
}.scrollable(ScrollDirection.Horizontal)

Button(){
Text('點擊回到原位')
}.onClick(()=>{
scroller.scrollTo({xOffset:0,yOffset:0,animation:{duration:200,curve:Curve.Linear}})
})
.....
③設置觸摸事件

根據移動的偏移量,判斷大于刪除布局寬度的一半則:打開刪除布局。

部分代碼如下:

.....
//初始化控制器
privatescroller=newScroller()
//按下的x軸坐標
privatedownX=0
//刪除按鈕的寬度
privatedeleteWidth=100

Scroll(scroller){//控制器綁定到滑動容器中
Row(){
Text('內容數據')
.width('100%').height(65)

Button(){
Text('刪除')
}
.width(this.deleteWidth).height(65)
}
}.scrollable(ScrollDirection.Horizontal)
.onTouch((event:TouchEvent)=>{//觸摸事件
//根據觸摸類型判斷
switch(event.type){
caseTouchType.Down://觸摸按下
//記錄按下的x軸坐標
this.downX=event.touches[0].x
break
caseTouchType.Up://觸摸抬起
//觸摸抬起,根據x軸總偏移量,判斷是否打開刪除
letxOffset=event.touches[0].x-this.downX
//滑到目標x軸的位置
vartoxOffset=0
//偏移量超過刪除按鈕一半且左滑,設置打開
if(Math.abs(xOffset)>vp2px(this.deleteWidth)/2&&xOffset0){
//刪除布局寬度
toxOffset=vp2px(this.deleteWidth)
}
//滑動指定位置,設置動畫
item.scroller.scrollTo({xOffset:toxOffset,yOffset:0,
animation:{duration:300,curve:Curve.Linear}})
//重置按下的x軸坐標
this.downX=0
break
}
})
.....
④使用列表加載

需要主要的點:
  • 需要給每個 item 綁定控制器,這樣才能控制對應的 item 打開或關閉

  • 打開的 item 記錄一下數據,點擊內容或刪除、滑動其他 item:如果有帶打開的 item,進行關閉

以下是完整代碼,可直接粘貼運行使用:

classTestData{
content:string
scroller:Scroller

constructor(content:string,scroller:Scroller){
this.content=content
this.scroller=scroller
}
}

@Entry
@Component
structSlidingDeleteList{
//刪除按鈕的寬度
privatedeleteWidth=100
//按下的x軸坐標
privatedownX=0
//已經打開刪除的數據
privateopenDeleteData:TestData=null
//測試數據
@StateprivatelistData:Array=[
{content:'內容數據1',scroller:newScroller()},{content:'內容數據2',scroller:newScroller()},
{content:'內容數據3',scroller:newScroller()},{content:'內容數據4',scroller:newScroller()},
{content:'內容數據5',scroller:newScroller()},{content:'內容數據6',scroller:newScroller()},
{content:'內容數據7',scroller:newScroller()},{content:'內容數據8',scroller:newScroller()},
]

@BuilderCustomItem(item:TestData){
Scroll(item.scroller){
Row(){
Text(item.content)
.width('100%').height(65)
.fontSize(16).textAlign(TextAlign.Center)
.onClick(()=>{
//如果刪除按鈕打開,關閉刪除按鈕且返回
if(this.openDeleteData!=null){
this.openDeleteData.scroller.scrollTo({xOffset:0,yOffset:0,
animation:{duration:100,curve:Curve.Linear}})
this.openDeleteData=null
return
}
console.log('========點擊內容=========')
})

Button(){
Text('刪除')
.fontSize(15)
.fontColor(Color.White)
}
.type(ButtonType.Normal)
.width(this.deleteWidth).height(65)
.backgroundColor(Color.Red)
.onClick(()=>{
//刪除當前數據
this.listData.splice(this.listData.indexOf(item),1)

//關閉刪除按鈕
if(this.openDeleteData!=null){
this.openDeleteData.scroller.scrollTo({xOffset:0,yOffset:0,
animation:{duration:100,curve:Curve.Linear}})
this.openDeleteData=null
}
console.log('========點擊刪除=========')
})
}
}.scrollable(ScrollDirection.Horizontal)
.onTouch((event:TouchEvent)=>{//觸摸事件
//判斷是否有打開刪除組件,有則關閉
if(this.openDeleteData!=null&&this.openDeleteData!=item){
this.openDeleteData.scroller.scrollTo({xOffset:0,yOffset:0,
animation:{duration:100,curve:Curve.Linear}})
}

//根據觸摸類型判斷
switch(event.type){
caseTouchType.Down://觸摸按下
//記錄按下的x軸坐標
this.downX=event.touches[0].x
break
caseTouchType.Up://觸摸抬起
//觸摸抬起,根據x軸總偏移量,判斷是否打開刪除
letxOffset=event.touches[0].x-this.downX
//防止消費點擊事件
if(xOffset==0){
return
}
//滑到x軸的位置
vartoxOffset=0
//開啟刪除的對象置為null
this.openDeleteData=null;
//偏移量超過刪除按鈕一半且左滑,設置打開
if(Math.abs(xOffset)>vp2px(this.deleteWidth)/2&&xOffset0){
//刪除布局寬度
toxOffset=vp2px(this.deleteWidth)
this.openDeleteData=item
}
//滑動指定位置,設置動畫
item.scroller.scrollTo({xOffset:toxOffset,yOffset:0,
animation:{duration:300,curve:Curve.Linear}})
//重置按下的x軸坐標
this.downX=0
break
}
})
}

build(){
Column(){
List(){
ForEach(this.listData,item=>{
ListItem(){
this.CustomItem(item)
}
},item=>item.toString())
}.divider({color:'#f1efef',strokeWidth:1})
}
.width('100%')
.height('100%')
}
}

結尾

因為 ArkUI 聲明式開發,是鴻蒙新出的東西,API 還不是那么完善,后續跟進官網更新。 以下是需要優化點:ArkUI 中的 TS 沒有 JS 中的新出的插槽概念,要不然直接封裝成組件,提供兩個對外的接口,一個傳入內容布局、一個操作布局,就像 Android 的組件庫一樣,使用者不需要知道內部實現。 作者:梁青松
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9519

    瀏覽量

    157013
  • API
    API
    +關注

    關注

    2

    文章

    2365

    瀏覽量

    66750
  • JS
    JS
    +關注

    關注

    0

    文章

    79

    瀏覽量

    18986
  • 鴻蒙
    +關注

    關注

    60

    文章

    2963

    瀏覽量

    45880

原文標題:在鴻蒙上實現聊天列表滑動刪除功能!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    刪除公鑰指紋

    的“應用”區域,找到“SHA256證書/公鑰指紋”欄中需刪除的公鑰指紋,點擊。 4。彈出確認提示框,核對指紋信息無誤后,點擊“確認”。 本文參考鴻蒙官方文檔
    發表于 01-07 15:31

    鴻蒙版微信消息彈窗不能進入聊天界面

    用的最新鴻蒙6.0系統,微信版本也是最新的,之前用的HarmonyOS4.0的微信就可以點擊消息彈窗,直接進入聊天界面,很方便。現在點擊消息彈窗是進入微信主界面,不能進入對應的聊天界面,有大佬知道是微信問題還是系統問題嗎?
    發表于 12-11 16:20

    滑動開關詳解:類型、規格和應用

    動作實現連接或斷開。這篇簡要的技術綜述將研究滑動開關的工作原理,探討其主要配置,并概述進行最優選擇的電氣和機械注意事項。 滑動開關的基礎知識 [滑動開關]是一種機電元件,通過線性
    的頭像 發表于 10-01 15:14 ?2177次閱讀
    <b class='flag-5'>滑動</b>開關詳解:類型、規格和應用

    基于LabVIEW的鼠標滑動方向檢測教程

    本篇教程源于一位客戶的真實需求,需要LabVIEW能夠檢測到鼠標滑動的方向,然后通過判斷滑動方向處理后續的功能
    的頭像 發表于 07-30 13:51 ?826次閱讀
    基于LabVIEW的鼠標<b class='flag-5'>滑動</b>方向檢測教程

    【HarmonyOS 5】鴻蒙應用實現發票掃描、文檔掃描輸出PDF圖片或者表格的功能

    【HarmonyOS 5】鴻蒙應用實現發票掃描、文檔掃描輸出PDF圖片或者表格的功能 ##鴻蒙開發能力 ##HarmonyOS SDK應用服務##
    的頭像 發表于 07-11 18:16 ?1370次閱讀
    【HarmonyOS 5】<b class='flag-5'>鴻蒙</b>應用<b class='flag-5'>實現</b>發票掃描、文檔掃描輸出PDF圖片或者表格的<b class='flag-5'>功能</b>

    HarmonyOS NEXT應用元服務常見列表操作二級聯動

    導航內容進行展示。在進入頁面后,點擊左側分類導航,右側展示對應導航分類詳情列表數據;滑動右側列表內容,列表標題吸頂展示,左側對應導航內容則高亮顯示。 頁面整體結構圖 頁面效果圖
    發表于 07-02 10:29

    鴻蒙ArkTS+ArkUI仿微信消息列表頁制作

    \' }) 這里使用了justifyContent屬性來進行居中,如果不加這個屬性的話,那么100%寬度的row會讓文字靠左顯示。接下來是顯示聊天數據的列表,這里采用ForEach列表渲染來
    發表于 06-30 18:28

    HarmonyOS NEXT應用元服務布局優化長列表使用懶加載與組件復用

    數據如下 可以發現列表滑動時丟幀率明顯降低,這是因為,List列表開啟了組件復用,不會執行BuildLazyItem這個耗時操作,后續創建新組件節點時,會直接復用緩存區中的節點,這樣就大幅節約了組件重新創建的時間。 本文主要引用
    發表于 06-27 16:08

    HarmonyOS實戰:Tab頂部滑動懸停功能實現

    日常開發過程中,遇到這種 Scroll 嵌套 List 列表滑動頂部懸停的場景十分常見,在鴻蒙開發時也正好實現了這個功能,本篇文章將帶你一步
    的頭像 發表于 06-24 17:07 ?443次閱讀

    HarmonyOS實戰:快速實現一個上下滾動的廣告控件

    上要想實現這樣的功能并不容易,那么在鴻蒙上怎么實現這樣的功能呢?本篇文章教你使用最簡單的方式實現
    的頭像 發表于 06-24 17:05 ?560次閱讀

    HarmonyOS實戰:實現任意拖動的應用懸浮窗口

    為了增加應用程序功能的豐富性和便利性,很多應用都會提供一個懸浮窗口實現多頁面顯示。特別是一些性能檢測工具,比如 dokit 。在鴻蒙上怎么實現類似的全局懸浮窗口呢?閱讀完本篇文章你將學
    的頭像 發表于 06-24 17:04 ?1338次閱讀

    鴻蒙5開發寶藏案例分享---長列表性能優化解析

    鴻蒙列表性能優化大揭秘!告別卡頓,實戰代碼解析來了! 大家好呀~今天在翻鴻蒙開發者文檔時,發現了個 性能優化寶藏案例 !官方居然悄悄放出了長列表卡頓的完整解決方案,實測效果炸裂!我連
    發表于 06-12 17:40

    鴻蒙5開發寶藏案例分享---分析幀率問題

    和代碼改造方案。我整理了幾個高頻場景,結合代碼講解,幫你徹底搞定流暢度優化! 一、長列表滑動卡頓優化 問題現象 : “HMOS世界”首頁加載1000條數據后,滑動越來越卡,丟幀率達7%。 分析工具
    發表于 06-12 17:07

    鴻蒙Next實現瀑布流布局

    為了實現類似真實瀑布流不斷加載新數據的效果,可以結合鴻蒙的 LazyForEach 組件,在滾動到列表底部時觸發數據加載邏輯 六、網絡權限 // config.json { \"module
    發表于 06-10 14:17

    Get這個秘籍,鴻蒙原生應用頁面滑動絲滑無比

    。 華為此次推出的ArkUI與Web頁面滑動白塊/白屏解決方案,不僅優化了鴻蒙應用的頁面加載性能,更顯著降低了開發者實現高性能滑動效果的門檻。歡迎更多開發者應用廠商使用和反饋,共同提升
    發表于 03-06 14:41