微信小程序左滑删除功能

效果图如下:

微信小程序左滑删除功能

wxml代码:

1 <view class="container">
2  <view class="touch-item {{item.isTouchMove ? 'touch-move-active' : ''}}" data-index="{{index}}" bindtouchstart="touchstart" bindtouchmove="touchmove" wx:for="{{items}}" wx:key="">
3   <view class="content">{{item.content}}</view>
4   <view class="del" catchtap="del" data-index="{{index}}">删除</view>
5  </view>
6 </view>

wxss代码:

 1 .touch-item {
 2  font-size: 14px;
 3  display: flex;
 4  justify-content: space-between;
 5  border-bottom:1px solid #ccc;
 6  width: 100%;
 7  overflow: hidden
 8 }
 9 .content {
10  width: 100%;
11  padding: 10px;
12  line-height: 22px;
13  margin-right:0;
14  -webkit-transition: all 0.4s;
15  transition: all 0.4s;
16  -webkit-transform: translateX(90px);
17  transform: translateX(90px);
18  margin-left: -90px
19 }
20 .del {
21  background-color: orangered;
22  width: 90px;
23  display: flex;
24  flex-direction: column;
25  align-items: center;
26  justify-content: center;
27  color: #fff;
28  -webkit-transform: translateX(90px);
29  transform: translateX(90px);
30  -webkit-transition: all 0.4s;
31  transition: all 0.4s;
32 }
33 .touch-move-active .content,
34 .touch-move-active .del {
35  -webkit-transform: translateX(0);
36  transform: translateX(0);
37 }

js代码:

 1 var app = getApp()
 2 Page({
 3  data: {
 4   items: [],
 5   startX: 0, //开始坐标
 6   startY: 0
 7  },
 8  onLoad: function () {
 9   for (var i = 0; i < 10; i++) {
10    this.data.items.push({
11     content: i + " 向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦",
12     isTouchMove: false //默认全隐藏删除
13    })
14   }
15   this.setData({
16    items: this.data.items
17   })
18  },
19  //手指触摸动作开始 记录起点X坐标
20  touchstart: function (e) {
21   //开始触摸时 重置所有删除
22   this.data.items.forEach(function (v, i) {
23    if (v.isTouchMove)//只操作为true的
24     v.isTouchMove = false;
25   })
26   this.setData({
27    startX: e.changedTouches[0].clientX,
28    startY: e.changedTouches[0].clientY,
29    items: this.data.items
30   })
31  },
32  //滑动事件处理
33  touchmove: function (e) {
34   var that = this,
35    index = e.currentTarget.dataset.index,//当前索引
36    startX = that.data.startX,//开始X坐标
37    startY = that.data.startY,//开始Y坐标
38    touchMoveX = e.changedTouches[0].clientX,//滑动变化坐标
39    touchMoveY = e.changedTouches[0].clientY,//滑动变化坐标
40    //获取滑动角度
41    angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });
42   that.data.items.forEach(function (v, i) {
43    v.isTouchMove = false
44    //滑动超过30度角 return
45    if (Math.abs(angle) > 30) return;
46    if (i == index) {
47     if (touchMoveX > startX) //右滑
48      v.isTouchMove = false
49     else //左滑
50      v.isTouchMove = true
51    }
52   })
53   //更新数据
54   that.setData({
55    items: that.data.items
56   })
57  },
58  /**
59   * 计算滑动角度
60   * @param {Object} start 起点坐标
61   * @param {Object} end 终点坐标
62   */
63  angle: function (start, end) {
64   var _X = end.X - start.X,
65    _Y = end.Y - start.Y
66   //返回角度 /Math.atan()返回数字的反正切值
67   return 360 * Math.atan(_Y / _X) / (2 * Math.PI);
68  },
69  //删除事件
70  del: function (e) {
71   this.data.items.splice(e.currentTarget.dataset.index, 1)
72   this.setData({
73    items: this.data.items
74   })
75  }
76 })

教程参考地址:http://www.jb51.net/article/108071.htm