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


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 相关文章推荐
firefox浏览器下javascript 拖动层效果与原理分析代码
Dec 04 Javascript
js 获取(接收)地址栏参数值的方法
Apr 01 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
javascript产生随机数方法汇总
Jan 25 Javascript
分享两段简单的JS代码防止SQL注入
Apr 12 Javascript
JS使用eval()动态创建变量的方法
Jun 03 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
JavaScript实现三级联动菜单效果
Aug 16 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 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生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
python实现简易动态时钟
2018/11/19 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
师范大学应届生求职信
2013/11/21 职场文书
高中毕业生个人自我鉴定
2013/11/24 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年个人售房协议书
2014/10/30 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
公司庆典主持词
2015/07/04 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers