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


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表单验证要注意的事项
Sep 29 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
微信小程序中weui用法解析
Oct 21 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 Javascript
Javascript文本框脚本实现方法解析
Oct 30 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 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
当海贼王变成JOJO风
2020/03/02 日漫
Yii2 批量插入、更新数据实例
2017/03/15 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js原型链原理看图说明
2012/07/07 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
详解Python_shutil模块
2019/03/15 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
python实现弹跳小球
2019/05/13 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
室内设计专业学生的自我评价分享
2013/11/27 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
工程项目建议书范文
2014/03/12 职场文书
大学生个人求职信例文
2014/07/07 职场文书
党员违纪检讨书
2015/05/05 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python