實(shí)現(xiàn)微信小程序中的滑動(dòng)刪除功能,需要具體代碼示例
隨著微信小程序的流行,開(kāi)發(fā)者們?cè)陂_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)遇到一些常見(jiàn)功能的實(shí)現(xiàn)問(wèn)題。其中,滑動(dòng)刪除功能是一個(gè)常見(jiàn)、常用的功能需求。本文將為大家詳細(xì)介紹如何在微信小程序中實(shí)現(xiàn)滑動(dòng)刪除功能,并給出具體的代碼示例。
一、需求分析
在微信小程序中,滑動(dòng)刪除功能的實(shí)現(xiàn)涉及到以下要點(diǎn):
- 列表展示:要顯示可滑動(dòng)刪除的列表,每個(gè)列表項(xiàng)需要包含刪除操作。觸發(fā)滑動(dòng):用戶觸摸列表項(xiàng),產(chǎn)生滑動(dòng)事件。滑動(dòng)動(dòng)畫:實(shí)現(xiàn)平滑的滑動(dòng)效果,即列表項(xiàng)能夠隨著用戶手指滑動(dòng)而滑動(dòng)。刪除操作:用戶滑動(dòng)列表項(xiàng)至一定位置后,松開(kāi)手指,觸發(fā)刪除操作。
二、代碼實(shí)現(xiàn)
- WXML部分:
在小程序的WXML中,我們需要構(gòu)建一個(gè)列表,其中每個(gè)列表項(xiàng)都包含滑動(dòng)刪除的功能。代碼如下:
<view class="list"> <block wx:for="{{listData}}" wx:for-item="item" wx:key="{{index}}"> <view class="list-item" animation="{{item.animation}}" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd" data-index="{{index}}"> <view>{{item.title}}</view> <view class="btn-delete" bindtap="deleteItem" wx:if="{{item.showDel}}">刪除</view> </view> </block> </view>
登錄后復(fù)制
- WXSS部分:
在WXML中定義好樣式結(jié)構(gòu)后,我們需要在WXSS中對(duì)樣式進(jìn)行定義。具體代碼如下:
.list{ padding: 20rpx; } .list-item{ position: relative; height: 100rpx; line-height: 100rpx; background-color: #ffffff; margin-bottom: 20rpx; overflow: hidden; } .btn-delete{ position: absolute; top: 0; right: 0; width: 120rpx; height: 100rpx; background-color: #f5222d; color: #ffffff; line-height: 100rpx; text-align: center; transition: all 0.2s; transform: translateX(120rpx); } .list-item:hover .btn-delete{ transform: translateX(0); }
登錄后復(fù)制
- JS部分:
在小程序的JS文件中,我們需要編寫具體的代碼來(lái)實(shí)現(xiàn)滑動(dòng)刪除功能。具體代碼如下:
Page({ data: { listData: [ { title: '列表項(xiàng)1', showDel: false, animation: '' }, { title: '列表項(xiàng)2', showDel: false, animation: '' }, { title: '列表項(xiàng)3', showDel: false, animation: '' }, // 其他列表項(xiàng)... ], startX: 0, // 手指起始X坐標(biāo) startY: 0, // 手指起始Y坐標(biāo) activeIndex: -1, // 激活的列表項(xiàng)索引 }, touchStart(e) { this.data.activeIndex = e.currentTarget.dataset.index; this.data.startX = e.touches[0].clientX; this.data.startY = e.touches[0].clientY; }, touchMove(e) { let index = e.currentTarget.dataset.index; let startX = this.data.startX; let startY = this.data.startY; let deltaX = e.touches[0].clientX - startX; let deltaY = e.touches[0].clientY - startY; // 水平滑動(dòng)大于豎直滑動(dòng) if (Math.abs(deltaX) > Math.abs(deltaY)) { // 滑動(dòng)方向向右 if (deltaX > 30) { this.showDelete(index); } // 滑動(dòng)方向向左 else if (deltaX < -30) { this.hideDelete(); } } }, touchEnd(e) { this.data.startX = 0; this.data.startY = 0; }, showDelete(index) { let listData = this.data.listData; listData[index].showDel = true; listData[index].animation = 'animation: showDelete 0.2s;'; this.setData({ listData: listData }); }, hideDelete() { let listData = this.data.listData; listData[this.data.activeIndex].showDel = false; listData[this.data.activeIndex].animation = ''; this.setData({ listData: listData }); }, deleteItem(e) { let index = e.currentTarget.dataset.index; let listData = this.data.listData; listData.splice(index, 1); this.setData({ listData: listData }); } })
登錄后復(fù)制
三、總結(jié)
通過(guò)以上的代碼示例,我們可以很容易實(shí)現(xiàn)微信小程序中的滑動(dòng)刪除功能。在WXML中,我們構(gòu)建了滑動(dòng)刪除功能所需的結(jié)構(gòu);在WXSS中,我們對(duì)樣式進(jìn)行了定義;在JS中,我們編寫了具體實(shí)現(xiàn)滑動(dòng)刪除功能的代碼。希望本文能夠?qū)δ谖⑿判〕绦蛑袑?shí)現(xiàn)滑動(dòng)刪除功能提供幫助。