微信小程序左滑删除效果的实现代码


Posted in Javascript onFebruary 20, 2017

今天我们说下微信小程序左滑删除效果的实现,现在市场上很多APP都在使用这个效果,一个listView页面,向左滑动一条item时,右侧会出现一个删除或者其他的选项,用户体验非常好,操作起来十分方便,今天我们使用微信小程序来实现这个效果.......

先看效果

微信小程序左滑删除效果的实现代码

要实现的效果:

1,当向左滑动时,item跟随手指像左移动,同时右侧出现两个可点击的按钮

2,当滑动距离大于按钮宽度一半松开手指时,item自动滑动到左侧显示出按钮,小于一半时item自动回到原来的位置,隐藏按钮。

思路:

1,首先页面每个item分为上下两层,上面一层放置正常内容,下面一层放置左滑显示出的按钮,这个可以使用z-index来实现分层。
2,item上层使用绝对定位,我们操纵 left 属性的值来实现像左移动。

3,我们通过微信小程序api提供的touch对象和3个有关手指触摸的函数(touchstart,touchmove,touchend)来实现item随手指移动。

微信小程序左滑删除效果的实现代码

微信小程序左滑删除效果的实现代码

由于比较简单,所以直接上代码了,详细的讲解都在代码的注释中,首先看下页面的布局

<!--这是一个item的代码>
  <view class="address-item" wx:for="{{addressList}}" >
  <!--这里绑定了刚才说的3个函数分别为 touchS,touchM touchE-->
  <!--这里注意这个 style="{{item.txtStyle}}" ,这是我们一会再js中 将要设置的样式 -->
    <view style="{{item.txtStyle}}" bindtouchstart="touchS" bindtouchmove="touchM" bindtouchend="touchE" data-index="{{index}}" class="address-item-top" >
     <!--中间无关的代码已被我删除-->
    </view>

     <!--这里是左滑按钮部分----start-->
    <view bindtap="delItem" class="posit">
      <view class="editor" data-addressid="{{item.address.ID}}" catchtap="setDefaultAddress">设为默认地址</view>
      <view class="del" data-addressid="{{item.address.ID}}" data-index="{{index}}" catchtap="delAddress">删除</view>
    </view>
     <!--这里是左滑按钮部分----end-->
  </view>

再看js代码

Page({
 data:{
  addressList:[{"Contact":"钟诚","Mobile":13888888888,"Address":"江苏省苏州市工业园区创意产业园"},
{"Contact":"凹凸曼","Mobile":13666666666,"Address":"江苏省苏州市工业园区独墅湖体育馆"},
{"Contact":"图傲曼","Mobile":13666666666,"Address":"江苏省苏州市工业园区独墅湖体育馆"}],
  editIndex:0,
  delBtnWidth:150//删除按钮宽度单位(rpx)
 },
 onLoad:function(options){},
 //手指刚放到屏幕触发
 touchS:function(e){
  console.log("touchS"+e);
  //判断是否只有一个触摸点
  if(e.touches.length==1){
   this.setData({
    //记录触摸起始位置的X坐标
    startX:e.touches[0].clientX
   });
  }
 },
 //触摸时触发,手指在屏幕上每移动一次,触发一次
 touchM:function(e){
   console.log("touchM:"+e);
  var that = this
  if(e.touches.length==1){
   //记录触摸点位置的X坐标
   var moveX = e.touches[0].clientX;
   //计算手指起始点的X坐标与当前触摸点的X坐标的差值
   var disX = that.data.startX - moveX;
   //delBtnWidth 为右侧按钮区域的宽度
   var delBtnWidth = that.data.delBtnWidth;
   var txtStyle = "";
   if(disX == 0 || disX < 0){//如果移动距离小于等于0,文本层位置不变
    txtStyle = "left:0px";
   }else if(disX > 0 ){//移动距离大于0,文本层left值等于手指移动距离
    txtStyle = "left:-"+disX+"px";
    if(disX>=delBtnWidth){
     //控制手指移动距离最大值为删除按钮的宽度
     txtStyle = "left:-"+delBtnWidth+"px";
    }
   }
   //获取手指触摸的是哪一个item
   var index = e.currentTarget.dataset.index;
   var list = that.data.addressList;
   //将拼接好的样式设置到当前item中
   list[index].txtStyle = txtStyle; 
   //更新列表的状态
   this.setData({
    addressList:list
   });
  }
 },
 touchE:function(e){
   console.log("touchE"+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+"px":"left:0px";
   //获取手指触摸的是哪一项
   var index = e.currentTarget.dataset.index;
   var list = that.data.addressList;
   list[index].txtStyle = txtStyle; 
   //更新列表的状态
   that.setData({
    addressList:list
   });
  }
 }

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

Javascript 相关文章推荐
jquery的键盘事件修改代码
Feb 24 Javascript
jquery获取下拉列表的值为null的解决方法
Mar 18 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
JavaScript打印iframe内容示例代码
Aug 20 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
RequireJS使用注意细节
May 15 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
Aug 31 Javascript
JavaScript轮播图简单制作方法
Feb 20 #Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
Feb 20 #Javascript
原生js实现放大镜
Feb 20 #Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
Feb 20 #Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 #Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 #Javascript
原生node.js案例--前后台交互
Feb 20 #Javascript
You might like
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
Python格式化css文件的方法
2015/03/10 Python
深入讲解Python编程中的字符串
2015/10/14 Python
python实现简单flappy bird
2018/12/24 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
请说出几个常用的异常类
2013/01/08 面试题
30年同学聚会感言
2014/01/30 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
母亲去世追悼词
2015/06/23 职场文书
七年级作文之英语老师
2019/10/28 职场文书
详解pytorch创建tensor函数
2022/03/22 Python
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL