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


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 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
js日期相关函数总结分享
Oct 15 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
JS简单计算器实例
Jan 20 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
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
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
js实现图片上传预览原理分析
2017/07/13 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python中的作用域规则详解
2015/01/30 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python闭包函数定义与用法分析
2018/07/20 Python
django将数组传递给前台模板的方法
2019/08/06 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
医药营销专业个人自荐信
2013/09/29 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
校园公益广告语
2014/03/13 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
离职感谢信
2015/01/21 职场文书