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


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 相关文章推荐
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
Jvascript学习实践案例(开发常用)
Jun 25 Javascript
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
使用JavaScript触发过渡效果的方法
Jan 19 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
vue中echarts3.0自适应的方法
Feb 26 Javascript
vue中子组件的methods中获取到props中的值方法
Aug 27 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
Vue强制组件重新渲染的方法讨论
Feb 03 Javascript
vue 实现用户登录方式的切换功能
Apr 14 Javascript
微信小程序左右滚动公告栏效果代码实例
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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
php 注册时输入信息验证器的实现详解
2013/07/05 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
Python中max函数用法实例分析
2015/07/17 Python
Python装饰器语法糖
2019/01/02 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
一套SQL笔试题
2016/08/14 面试题
最经典的商业地产项目广告词
2014/03/13 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
护士实习自荐信
2015/03/06 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python