微信小程序实现滑动删除效果


Posted in Javascript onMay 19, 2017

最初打算使用scroll-view实现,效果好、流畅、有惯性滑动,但由于滚动条没法去掉、无法实现上下层的帧布局,最终放弃了。

还是自己写个吧,利用手势事件。遗憾的是小程序中目前没有像Android中快速滑动事件,所以,要实现惯性滑动是不可能了。

微信小程序实现滑动删除效果

item的布局:

推荐小程序优先使用flex布局,完全够用。这也是微信推荐的。

<view wx:for="{{cardTeams}}" wx:for-item="cardTeam" id="{{cardTeam.id}}" class="item" bindtouchstart="drawStart" bindtouchmove="drawMove" bindtouchend="drawEnd" style="right:{{cardTeam.right}}px"> 
    <image class="img" src="http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg" mode="scaleToFill"></image> 
    <view class="number-wrapper"> 
     <text class="name">{{cardTeam.name}}</text> 
     <view class="count-wrapper"> 
      <view class="decrease-btn">-</view> 
      <text class="count">1</text> 
      <view class="increase-btn">+</view> 
     </view> 
     <view class="price-wrapper"> 
      <text class="unit">¥</text> 
      <text class="price">99.80</text> 
     </view> 
    </view> 
    <view class="ok"><view class="inner-ok">确定</view></view> 
    <view class="remove" data-id="{{cardTeam.id}}" bindtap="delItem"><view>删除</view></view> 
   </view>

主要是将删除按钮的设为绝对定位(position: absolute):

.item .remove{ 
  width: 60px; 
  height: 100%; 
  background-color: red; 
  position: absolute; 
  top: 0; 
  right: -60px; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
}
Page({ 
 data: { 
  cardTeams:[{"id":"aaaaa", "name":"android教程", "url":"http://www.see-source.com", "right":0, "startRight":0},{"id":"bbbb", "name":"小程序教程", "url":"http://www.see-source.com", "right":0, "startRight":0}] 
 }, 
 drawStart : function(e){ 
   // console.log("drawStart"); 
  var touch = e.touches[0]; 
  startX = touch.clientX; 
  startY = touch.clientY; 
  var cardTeams = this.data.cardTeams; 
  for(var i in cardTeams){ 
    var data = cardTeams[i]; 
    data.startRight = data.right; 
  } 
  key = true; 
 }, 
 drawEnd : function(e){ 
  console.log("drawEnd"); 
  var cardTeams = this.data.cardTeams; 
  for(var i in cardTeams){ 
    var data = cardTeams[i]; 
    if(data.right <= 100/2){ 
      data.right = 0; 
    }else{ 
      data.right = maxRight; 
    } 
  } 
  this.setData({ 
    cardTeams:cardTeams 
  }); 
 }, 
 drawMove : function(e){ 
   //console.log("drawMove"); 
  var self = this; 
  var dataId = e.currentTarget.id; 
  var cardTeams = this.data.cardTeams; 
  if(key){ 
    var touch = e.touches[0]; 
    endX = touch.clientX; 
    endY = touch.clientY; 
    console.log("startX="+startX+" endX="+endX ); 
    if(endX - startX == 0) 
      return ; 
    var res = cardTeams; 
      //从右往左 
 
      if((endX - startX) < 0){ 
        for(var k in res){ 
          var data = res[k]; 
          if(res[k].id == dataId){ 
            var startRight = res[k].startRight; 
            var change = startX - endX; 
            startRight += change; 
            if(startRight > maxRight) 
              startRight = maxRight; 
            res[k].right = startRight; 
          } 
        } 
      }else{//从左往右 
        for(var k in res){ 
          var data = res[k]; 
          if(res[k].id == dataId){ 
            var startRight = res[k].startRight; 
            var change = endX - startX; 
            startRight -= change; 
            if(startRight < 0) 
              startRight = 0; 
            res[k].right = startRight ; 
          } 
        } 
      } 
      self.setData({ 
        cardTeams:cardTeams 
      }); 
           
  } 
 }, 
 //删除item 
 delItem: function(e){ 
  var dataId = e.target.dataset.id; 
  console.log("删除"+dataId); 
  var cardTeams = this.data.cardTeams; 
  var newCardTeams = [];  
  for(var i in cardTeams){ 
    var item = cardTeams[i]; 
    if(item.id != dataId){ 
     newCardTeams.push(item); 
    } 
  } 
  this.setData({ 
    cardTeams:newCardTeams 
   }); 
 }, 
 onLoad: function () { 
  console.log('onLoad:'+app.globalData.domain) 
   
 } 
})

drawStart用于记录手指触碰时的位置,drawMove记录手指滑动的位置,两者的差值就是删除按钮的偏移量
drawEnd手指抬起时触发,用于设置弹回、摊开效果。目前我的是超过一半自动弹开,不足一半自动收回。

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

Javascript 相关文章推荐
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
JavaScript控制Session操作方法
Jan 17 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
Apr 24 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
Jun 05 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
Feb 28 Javascript
javascript如何定义对象数组
Jun 07 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
Vue声明式渲染详解
May 17 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
JavaScript文档对象模型DOM
Nov 20 Javascript
微信小程序图片横向左右滑动案例
May 19 #Javascript
layui导航栏实现代码
May 19 #Javascript
详解AngularJS controller调用factory
May 19 #Javascript
layer弹窗插件操作方法详解
May 19 #Javascript
layui选项卡效果实现代码
May 19 #Javascript
bootstrap table单元格新增行并编辑
May 19 #Javascript
layui弹出层效果实现代码
May 19 #Javascript
You might like
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
php session 写入数据库
2016/02/13 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
Node.js实现数据推送
2016/04/14 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
Express + Session 实现登录验证功能
2017/09/08 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python实现的防DDoS脚本
2011/02/08 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python中字符串的处理技巧分享
2016/09/17 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript