微信小程序?qū)崿F(xiàn)滑動(dòng)刪除效果
最初打算使用scroll-view實(shí)現(xiàn),效果好、流暢、有慣性滑動(dòng),但由于滾動(dòng)條沒(méi)法去掉、無(wú)法實(shí)現(xiàn)上下層的幀布局,最終放棄了。
還是自己寫個(gè)吧,利用手勢(shì)事件。遺憾的是小程序中目前沒(méi)有像Android中快速滑動(dòng)事件,所以,要實(shí)現(xiàn)慣性滑動(dòng)是不可能了。

item的布局:
推薦小程序優(yōu)先使用flex布局,完全夠用。這也是微信推薦的。
<view wx:for="{{cardTeams}}" wx:for-item="cardTeam" id="{{cardTeam.id}}" class="item" bindtouchstart="drawStart" bindtouchmove="drawMove" bindtouchend="drawEnd" style="right:{{cardTeam.right}}px">
<image class="img" src="http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg" mode="scaleToFill"></image>
<view class="number-wrapper">
<text class="name">{{cardTeam.name}}</text>
<view class="count-wrapper">
<view class="decrease-btn">-</view>
<text class="count">1</text>
<view class="increase-btn">+</view>
</view>
<view class="price-wrapper">
<text class="unit">¥</text>
<text class="price">99.80</text>
</view>
</view>
<view class="ok"><view class="inner-ok">確定</view></view>
<view class="remove" data-id="{{cardTeam.id}}" bindtap="delItem"><view>刪除</view></view>
</view>
主要是將刪除按鈕的設(shè)為絕對(duì)定位(position: absolute):
.item .remove{
width: 60px;
height: 100%;
background-color: red;
position: absolute;
top: 0;
right: -60px;
display: flex;
justify-content: center;
align-items: center;
}
Page({
data: {
cardTeams:[{"id":"aaaaa", "name":"android教程", "url":"http://www.see-source.com", "right":0, "startRight":0},{"id":"bbbb", "name":"小程序教程", "url":"http://www.see-source.com", "right":0, "startRight":0}]
},
drawStart : function(e){
// console.log("drawStart");
var touch = e.touches[0];
startX = touch.clientX;
startY = touch.clientY;
var cardTeams = this.data.cardTeams;
for(var i in cardTeams){
var data = cardTeams[i];
data.startRight = data.right;
}
key = true;
},
drawEnd : function(e){
console.log("drawEnd");
var cardTeams = this.data.cardTeams;
for(var i in cardTeams){
var data = cardTeams[i];
if(data.right <= 100/2){
data.right = 0;
}else{
data.right = maxRight;
}
}
this.setData({
cardTeams:cardTeams
});
},
drawMove : function(e){
//console.log("drawMove");
var self = this;
var dataId = e.currentTarget.id;
var cardTeams = this.data.cardTeams;
if(key){
var touch = e.touches[0];
endX = touch.clientX;
endY = touch.clientY;
console.log("startX="+startX+" endX="+endX );
if(endX - startX == 0)
return ;
var res = cardTeams;
//從右往左
if((endX - startX) < 0){
for(var k in res){
var data = res[k];
if(res[k].id == dataId){
var startRight = res[k].startRight;
var change = startX - endX;
startRight += change;
if(startRight > maxRight)
startRight = maxRight;
res[k].right = startRight;
}
}
}else{//從左往右
for(var k in res){
var data = res[k];
if(res[k].id == dataId){
var startRight = res[k].startRight;
var change = endX - startX;
startRight -= change;
if(startRight < 0)
startRight = 0;
res[k].right = startRight ;
}
}
}
self.setData({
cardTeams:cardTeams
});
}
},
//刪除item
delItem: function(e){
var dataId = e.target.dataset.id;
console.log("刪除"+dataId);
var cardTeams = this.data.cardTeams;
var newCardTeams = [];
for(var i in cardTeams){
var item = cardTeams[i];
if(item.id != dataId){
newCardTeams.push(item);
}
}
this.setData({
cardTeams:newCardTeams
});
},
onLoad: function () {
console.log('onLoad:'+app.globalData.domain)
}
})
drawStart用于記錄手指觸碰時(shí)的位置,drawMove記錄手指滑動(dòng)的位置,兩者的差值就是刪除按鈕的偏移量
drawEnd手指抬起時(shí)觸發(fā),用于設(shè)置彈回、攤開(kāi)效果。目前我的是超過(guò)一半自動(dòng)彈開(kāi),不足一半自動(dòng)收回。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序?qū)崿F(xiàn)tabbar凹凸圓選中動(dòng)畫效果實(shí)例
小程序日益增多的情況下,UI風(fēng)格顯得越來(lái)越重要,下面這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)tabbar凹凸圓選中動(dòng)畫效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
基于JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
微信小程序使用webview打開(kāi)pdf文檔以及顯示網(wǎng)頁(yè)內(nèi)容的方法步驟
在線查看PDF文件,已經(jīng)是很常見(jiàn)的需求了,下面這篇文章主要給大家介紹了關(guān)于微信小程序使用webview打開(kāi)pdf文檔以及顯示網(wǎng)頁(yè)內(nèi)容的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果
頁(yè)面平滑滾動(dòng)是網(wǎng)頁(yè)一種常見(jiàn)的效果,平滑滾動(dòng)的原理其實(shí)很簡(jiǎn)單,無(wú)非就是讓頁(yè)面一種肉眼可見(jiàn)的速度從當(dāng)前位置滾動(dòng)到指定位置,那如何用原生的JS實(shí)現(xiàn)這也效果呢?本文給大家介紹了JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果,需要的朋友可以參考下2024-06-06
javascript關(guān)于“時(shí)間”的一次探索
這篇文章主要介紹了javascript關(guān)于“時(shí)間”的一次探索,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
MUI 解決動(dòng)態(tài)列表頁(yè)圖片懶加載再次加載不成功的bug問(wèn)題
這篇文章主要介紹了MUI 解決動(dòng)態(tài)列表頁(yè)圖片懶加載再次加載不成功的bug問(wèn)題,解決方法很簡(jiǎn)單的,需要的朋友可以參考下2017-04-04
JS一維數(shù)組轉(zhuǎn)多維數(shù)組樹(shù)的方法
這篇文章主要介紹了JS一維數(shù)組轉(zhuǎn)多維數(shù)組樹(shù)的方法,文章通過(guò)代碼示例給大家講解的非常詳細(xì),?對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06
最好用的二級(jí)聯(lián)動(dòng) 原生js實(shí)現(xiàn)你值得擁有
二級(jí)聯(lián)動(dòng)效果,實(shí)現(xiàn)方法有很多,不過(guò)其他文章中介紹的都比較籠統(tǒng),在本文有一個(gè)詳細(xì)的實(shí)現(xiàn)過(guò)程,使用原生js很容易理解,希望大家可以參考下2013-09-09

