實(shí)現(xiàn)微信小程序中的滑動刪除功能,需要具體代碼示例
隨著微信小程序的流行,開發(fā)者們在開發(fā)過程中經(jīng)常會遇到一些常見功能的實(shí)現(xiàn)問題。其中,滑動刪除功能是一個(gè)常見、常用的功能需求。本文將為大家詳細(xì)介紹如何在微信小程序中實(shí)現(xiàn)滑動刪除功能,并給出具體的代碼示例。
一、需求分析
在微信小程序中,滑動刪除功能的實(shí)現(xiàn)涉及到以下要點(diǎn):
- 列表展示:要顯示可滑動刪除的列表,每個(gè)列表項(xiàng)需要包含刪除操作。觸發(fā)滑動:用戶觸摸列表項(xiàng),產(chǎn)生滑動事件。滑動動畫:實(shí)現(xiàn)平滑的滑動效果,即列表項(xiàng)能夠隨著用戶手指滑動而滑動。刪除操作:用戶滑動列表項(xiàng)至一定位置后,松開手指,觸發(fā)刪除操作。
二、代碼實(shí)現(xiàn)
- WXML部分:
在小程序的WXML中,我們需要構(gòu)建一個(gè)列表,其中每個(gè)列表項(xià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中對樣式進(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文件中,我們需要編寫具體的代碼來實(shí)現(xiàn)滑動刪除功能。具體代碼如下:
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;
// 水平滑動大于豎直滑動
if (Math.abs(deltaX) > Math.abs(deltaY)) {
// 滑動方向向右
if (deltaX > 30) {
this.showDelete(index);
}
// 滑動方向向左
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é)
通過以上的代碼示例,我們可以很容易實(shí)現(xiàn)微信小程序中的滑動刪除功能。在WXML中,我們構(gòu)建了滑動刪除功能所需的結(jié)構(gòu);在WXSS中,我們對樣式進(jìn)行了定義;在JS中,我們編寫了具體實(shí)現(xiàn)滑動刪除功能的代碼。希望本文能夠?qū)δ谖⑿判〕绦蛑袑?shí)現(xiàn)滑動刪除功能提供幫助。






