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


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的push使用指南
Dec 05 Javascript
学习javascript面向对象 掌握创建对象的9种方式
Jan 04 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
H5图片压缩与上传实例
Apr 21 Javascript
Node.js中的http请求客户端示例(request client)
May 04 Javascript
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
详解JS浏览器事件循环机制
Mar 27 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
微信小程序图片横向左右滑动案例
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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Python获取央视节目单的实现代码
2015/07/25 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
投标担保书范文
2014/04/02 职场文书
初三学生个人自我评定
2014/04/06 职场文书
微笑服务标语
2014/06/24 职场文书
企业贷款委托书格式
2014/09/12 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
门市房租房协议书
2014/12/04 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书