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


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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
Feb 15 Javascript
Javascript 日期处理之时区问题
Oct 08 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
JS对文本框值的判断示例
Mar 10 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
使用JavaScript 实现的人脸检测
Mar 24 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
详解如何使用webpack打包JS
Jun 21 Javascript
微信小程序实现横向增长表格的方法
Jul 24 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 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常用函数的用法详解
2013/05/10 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
使用javascript访问XML数据的实例
2006/12/27 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
python实现360的字符显示界面
2014/02/21 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
python中 * 的用法详解
2019/07/10 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
学Python 3的理由和必要性
2019/11/19 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
横幅标语大全
2014/06/17 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
少年雷锋观后感
2015/06/10 职场文书
MySQL分库分表详情
2021/09/25 MySQL