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


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 相关文章推荐
javascript 类方法定义还是有点区别
Apr 15 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
超漂亮的jQuery图片轮播特效
Nov 24 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
浅谈javascript中遇到的字符串对象处理
Nov 18 Javascript
canvas实现图片根据滑块放大缩小效果
Feb 24 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
Apr 16 jQuery
微信小程序图片横向左右滑动案例
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
set_include_path在win和linux下的区别
2008/01/10 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
python正则表达式的使用
2017/06/12 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python3的输入方式及多组输入方法
2018/10/17 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
python基于Selenium的web自动化框架
2019/07/14 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
python中pickle模块浅析
2020/12/29 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
传播学毕业生求职信
2013/10/11 职场文书
本科生求职简历的自我评价
2013/10/21 职场文书
大学社团计划书
2014/05/01 职场文书
2015个人半年总结范文
2015/03/09 职场文书
会议主持词通用版
2019/04/02 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
python基础之函数的定义和调用
2021/10/24 Python
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
Golang数据类型和相互转换
2022/04/12 Golang