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


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验证Checkbox是否选中的代码 推荐
Sep 04 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
jQuery实现点击该行即可删除HTML表格行
Oct 17 Javascript
javascript操作ul中li的方法
May 14 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
angularjs实现首页轮播图效果
Apr 14 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
vue-cli3环境变量与分环境打包的方法示例
Feb 18 Javascript
详解JavaScript中的函数、对象
Apr 01 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
文件上传的实现
2006/10/09 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Python实现批量下载文件
2015/05/17 Python
python中的格式化输出用法总结
2016/07/28 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
一个C/C++编程面试题
2013/11/10 面试题
《穷人》教学反思
2014/04/08 职场文书
《桥》教学反思
2014/04/09 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
琅琊山导游词
2015/02/05 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android