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


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 相关文章推荐
JavaScript面向对象编程
Mar 02 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
Jul 23 Javascript
前台js调用后台方法示例
Dec 02 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
利用js制作html table分页示例(js实现分页)
Apr 25 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
vue异步加载高德地图的实现
Jun 19 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
numpy中的高维数组转置实例
2018/04/17 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
浅析NumPy 切片和索引
2020/09/02 Python
一岗双责责任书
2014/04/15 职场文书
教师求职信
2014/06/17 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
《春酒》教学反思
2016/02/22 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang