更多内容请访问:https://harmonyos.51cto.com,与华为官方共同打造的鸿蒙技术社区本项目基于ArkUI中的TS扩展声明式开发范式语法和概念请参考官网官方文档地址:TSextension-baseddeclarativedevelopmentparadigm1、TSextension-baseddeclarativedevelopmentparadigm2本文介绍列表滑动删除:只允许一项在列表中滑出如果有打开的项目,点击或滑动其他项目会关闭打开的项目点击删除刷新列表界面定义组件侧滑菜单(JS)】【HarmonyOSArkUI聊天列表滑动删除(TS)】效果演示主要知识点滑动容器组件(Scroll)和触摸事件(onTouch)实现思路理解主要逻辑。1、item布局主要使用scroll包裹内容,scroll设置为水平滑动(部分代码)....scroll(){Row(){Text('contentdata').width('100%').height(65)Button(){Text('Delete')}.width(100).height(65)}}.scrollable(ScrollDirection.Horizo??ntal)//设置水平滑动.....2、ScrollcontainertoScrollcontainer只有一种方法用于绑定滑动组件的controller:滑动到指定位置scrollToscrollTo(value:{xOffset:number|string,yOffset:number|string,animation?:{duration:number,曲线:曲线}});看源码知道可以设置动画时间。注意:目前好像不能设置超过300毫秒的时间。可以设置下来(部分代码)....//初始化控制器privatescroller=newScroller()Scroll(scroller){//控制器绑定到滑动容器Row(){Text('contentdata').width('100%').height(65)Button(){Text('Delete')}.width(100).height(65)}}.scrollable(ScrollDirection.Horizo??ntal)Button(){Text('点击返回原位')}.onClick(()=>{scroller.scrollTo({xOffset:0,yOffset:0,animation:{duration:200,curve:Curve.Linear}})})。..3。根据移动设置触摸事件的偏移量,如果判断大于删除布局宽度的一半:打开删除布局(部分代码).....//初始化控制器privatescroller=newScroller()//按下x轴坐标privatedownX=0//删除按钮的宽度privatedeleteWidth=100Scroll(scroller){//控制器绑定滑动容器Row(){Text('contentdata').width('100%').height(65)Button(){文本('Delete')}.width(this.deleteWidth).height(65)}}.scrollable(ScrollDirection.Horizo??ntal).onTouch((event:TouchEvent)=>{//Touch事件//判断switch(event.type){caseTouchType.Down://touchpress//记录按下的x轴坐标this.downX=event.touches[0].xbreakcaseTouchType.Up://touchlift/touchlift,根据的总偏移量x轴,判断是否开启删除letxOffset=event.touches[0].x-this.downX//滑动到目标x轴的位置vartoxOffset=0//偏移超过删除按钮的一半并向左滑动,设置打开if(Math.abs(xOffset)>vp2px(this.deleteWidth)/2&&xOffset<0){//删除布局宽度toxOffset=vp2px(this.deleteWidth)}//滑动指定位置并设置animationitem.scroller.scrollTo({xOffset:toxOffset,yOffset:0,animation:{duration:300,curve:Curve.Linear}})//重置按下的x轴坐标this.downX=0break}}).....4、使用列表加载需要注意的要点:需要为每个item绑定一个controller,这样就可以控制相应的项目打开或关闭。打开的item记录数据,点击内容或删除,滑动其他item:如果有打开的item,close下面是完整代码,直接粘贴运行即可classTestData{content:stringscroller:Scrollerconstructor(content:string,scroller:Scroller){this.content=contentthis.scroller=scroller}}@Entry@ComponentstructSlidingDeleteList{//删除按钮宽度privatedeleteWidth=100//按下的x轴坐标privatedownX=0//删除的数据已经打开privateopenDeleteData:TestData=null//测试数据@StateprivatelistData:Array
