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


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 相关文章推荐
表单验证的完整应用案例探讨
Mar 29 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
jquery.post用法示例代码
Jan 03 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
Bootstrap popover用法详解
Dec 22 Javascript
微信小程序获取手机号授权用户登录功能
Nov 09 Javascript
编写React组件项目实践分析
Mar 04 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 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
php文本转图片自动换行的方法
2013/03/13 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
jQuery实现本地存储
2020/12/22 jQuery
Python正则表达式知识汇总
2017/09/22 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
简单了解python模块概念
2018/01/11 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python基于SMTP协议发送邮件
2019/05/31 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
大专应届生个人的自我评价
2013/11/21 职场文书
学年末自我鉴定
2014/01/21 职场文书
医学生自我评价
2014/01/27 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
紧急迫降观后感
2015/06/15 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
nginx配置指令之server_name的具体使用
2022/08/14 Servers
python 使用pandas读取csv文件的方法
2022/12/24 Python