天天看點

html5 向左滑動删除,微信小程式 向左滑動删除功能的實作

這篇文章主要介紹了微信小程式 向左滑動删除功能的實作的相關資料,需要的朋友可以參考下

微信小程式 向左滑動删除功能的實作

實作效果圖:

html5 向左滑動删除,微信小程式 向左滑動删除功能的實作

實作代碼:

1、wxml touch-item元素綁定了bindtouchstart、bindtouchmove事件

{{item.content}}

删除

2、wxss flex布局、css3動畫

.touch-item {

font-size: 14px;

display: flex;

justify-content: space-between;

border-bottom:1px solid #ccc;

width: 100%;

overflow: hidden

}

.content {

width: 100%;

padding: 10px;

line-height: 22px;

margin-right:0;

-webkit-transition: all 0.4s;

transition: all 0.4s;

-webkit-transform: translateX(90px);

transform: translateX(90px);

margin-left: -90px

}

.del {

background-color: orangered;

width: 90px;

display: flex;

flex-direction: column;

align-items: center;

justify-content: center;

color: #fff;

-webkit-transform: translateX(90px);

transform: translateX(90px);

-webkit-transition: all 0.4s;

transition: all 0.4s;

}

.touch-move-active .content,

.touch-move-active .del {

-webkit-transform: translateX(0);

transform: translateX(0);

}

3、js 注釋很詳細

var app = getApp()

Page({

data: {

items: [],

startX: 0, //開始坐标

startY: 0

},

onLoad: function () {

for (var i = 0; i < 10; i++) {

this.data.items.push({

content: i + " 向左滑動删除哦,向左滑動删除哦,向左滑動删除哦,向左滑動删除哦,向左滑動删除哦",

isTouchMove: false //預設全隐藏删除

})

}

this.setData({

items: this.data.items

})

},

//手指觸摸動作開始 記錄起點X坐标

touchstart: function (e) {

//開始觸摸時 重置所有删除

this.data.items.forEach(function (v, i) {

if (v.isTouchMove)//隻操作為true的

v.isTouchMove = false;

})

this.setData({

startX: e.changedTouches[0].clientX,

startY: e.changedTouches[0].clientY,

items: this.data.items

})

},

//滑動事件處理

touchmove: function (e) {

var that = this,

index = e.currentTarget.dataset.index,//目前索引

startX = that.data.startX,//開始X坐标

startY = that.data.startY,//開始Y坐标

touchMoveX = e.changedTouches[0].clientX,//滑動變化坐标

touchMoveY = e.changedTouches[0].clientY,//滑動變化坐标

//擷取滑動角度

angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });

that.data.items.forEach(function (v, i) {

v.isTouchMove = false

//滑動超過30度角 return

if (Math.abs(angle) > 30) return;

if (i == index) {

if (touchMoveX > startX) //右滑

v.isTouchMove = false

else //左滑

v.isTouchMove = true

}

})

//更新資料

that.setData({

items: that.data.items

})

},

angle: function (start, end) {

var _X = end.X - start.X,

_Y = end.Y - start.Y

//傳回角度 /Math.atan()傳回數字的反正切值

return 360 * Math.atan(_Y / _X) / (2 * Math.PI);

},

//删除事件

del: function (e) {

this.data.items.splice(e.currentTarget.dataset.index, 1)

this.setData({

items: this.data.items

})

}

})

以上就是本文的全部内容,希望對大家的學習有所幫助,更多相關内容請關注PHP中文網!

相關推薦: