微信小程序左滑删除实现代码实例


Posted in Javascript onSeptember 16, 2019

这篇文章主要介绍了微信小程序左滑删除实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

<view class="touch-item {{item.isTouchMove ? 'touch-move-active' : ''}}" data-index="{{index}}" wx:for="{{list}}" wx:key>
<view class="content">


<view style="{{item.txtStyle}}" class='item' data-index='{{index}}' bindtouchstart="touchstart" bindtouchmove="touchmove" bindtouchend="touchE">


<view class='title'>{{item.title}}</view>


<text>{{item.create_time}}</text>

</view>
</view>

<view class="del" data-id="{{item.id}}" catchtap="delBtn" data-index="{{index}}">删除</view>
</view>
.touch-item {
display: flex;

justify-content: space-between;

width: 100%;

overflow: hidden;

margin-bottom: 10rpx;

background: #f5f5f5;

height: 216rpx;
}

.content {

width: 100%;

margin-right: 0;

-webkit-transition: all 0.4s;

transition: all 0.4s;

-webkit-transform: translateX(90px);

transform: translateX(90px);

margin-left: -90px;
}

.del {

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;

font-size: 35rpx;
}

.touch-move-active .content, .touch-move-active .del {

-webkit-transform: translateX(0);

transform: translateX(0);
}
// pages/touch/touch.js
Page({

  /**
* 页面的初始数据
*/
  data: {
    startX: 0,
    //开始坐标
    startY: 0,
    page: 1,
    list: [{
      id: 0,
      title: '标题1',
      create_time: '2019-09-06'
    },
    {
      id: 1,
      title: '标题2',
      create_time: '2019-09-06'
    },
    {
      id: 2,
      title: '标题3',
      create_time: '2019-09-06'
    },
    ]
  },
  touchE: function(e) {
    // console.log(e);
    var that = this
    if (e.changedTouches.length == 1) {
      //手指移动结束后触摸点位置的X坐标
      var endX = e.changedTouches[0].clientX;
      //触摸开始与结束,手指移动的距离
      var disX = that.data.startX - endX;
      var delBtnWidth = that.data.delBtnWidth;
      //如果距离小于删除按钮的1/2,不显示删除按钮
      var txtStyle = disX > delBtnWidth / 2 ? "left:-" + delBtnWidth + "rpx": "left:0rpx";

      //获取手指触摸的是哪一项
      var index = e.currentTarget.dataset.index;
      var list = that.data.list;
      list[index].txtStyle = txtStyle;
      //更新列表的状态
      that.setData({
        list: list
      });
    }
  },
  //手指触摸动作开始 记录起点X坐标
  touchstart: function(e) {
    //开始触摸时 重置所有删除
    this.data.list.forEach(function(v, i) {
      if (v.isTouchMove) //只操作为true的
      v.isTouchMove = false;
    }) this.setData({
      startX: e.changedTouches[0].clientX,
      startY: e.changedTouches[0].clientY,
      list: this.data.list
    })
  },
  //滑动事件处理
  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.list.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({
      list: that.data.list
    })
  },
  /**
* 计算滑动角度
* @param {Object} start 起点坐标
* @param {Object} end 终点坐标
*/
  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);
  },
  /**
* 生命周期函数--监听页面加载
*/
  onLoad: function(options) {
},
  /**
* 生命周期函数--监听页面初次渲染完成
*/
  onReady: function() {
},
  /**
* 生命周期函数--监听页面显示
*/
  onShow: function() {
},
  /**
* 生命周期函数--监听页面隐藏
*/
  onHide: function() {
},
  /**
* 生命周期函数--监听页面卸载
*/
  onUnload: function() {
},
  /**
* 页面相关事件处理函数--监听用户下拉动作
*/
  onPullDownRefresh: function() {
},
  /**
* 页面上拉触底事件的处理函数
*/
  onReachBottom: function() {
},
  /**
* 用户点击右上角分享
*/
  onShareAppMessage: function() {
}
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
jquery处理json对象
Nov 03 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
js实现索引图片切换效果
Nov 21 Javascript
JS实现动画兼容性的transition和transform实例分析
Dec 13 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
input输入框内容实时监测(附代码)
Aug 15 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
Jan 24 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
微信小程序左右滚动公告栏效果代码实例
Sep 16 #Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 #Javascript
Vue 自定义指令实现一键 Copy功能
Sep 16 #Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
Sep 16 #Javascript
layui使用templet格式化表格数据的方法
Sep 16 #Javascript
layui监听单元格编辑前后交互的例子
Sep 16 #Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 #Javascript
You might like
PHP中session变量的销毁
2014/02/27 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php实现多城市切换特效
2015/08/09 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
js+html制作简单验证码
2017/02/16 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
python获取指定网页上所有超链接的方法
2015/04/04 Python
Python实现DDos攻击实例详解
2019/02/02 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python实现猜拳游戏
2020/03/04 Python
找到不普通的东西:Bonanza
2016/10/20 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
财务部副经理岗位职责
2014/03/14 职场文书
专项法律服务方案
2014/06/11 职场文书
运动会通讯稿200字
2015/07/20 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python