微信小程序 向左滑动删除功能的实现


Posted in Javascript onMarch 10, 2017

微信小程序 向左滑动删除功能的实现

实现效果图:

微信小程序 向左滑动删除功能的实现

实现代码:

1、wxml touch-item元素绑定了bindtouchstart、bindtouchmove事件

<view class="container">
 <view class="touch-item {{item.isTouchMove ? 'touch-move-active' : ''}}" data-index="{{index}}" bindtouchstart="touchstart" bindtouchmove="touchmove" wx:for="{{items}}" wx:key="">
  <view class="content">{{item.content}}</view>
  <view class="del" catchtap="del" data-index="{{index}}">删除</view>
 </view>
</view>

2、wxss flex布局、css3动画

.touch-item {
 font-size: 14px;
 display: flex;
 justify-content: space-between;
 border-bottom:1px solid #ccc;
 width: 100%;
 overflow: hidden
}
.content {
 width: 100%;
 padding: 10px;
 line-height: 22px;
 margin-right:0;
 -webkit-transition: all 0.4s;
 transition: all 0.4s;
 -webkit-transform: translateX(90px);
 transform: translateX(90px);
 margin-left: -90px
}
.del {
 background-color: orangered;
 width: 90px;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 color: #fff;
 -webkit-transform: translateX(90px);
 transform: translateX(90px);
 -webkit-transition: all 0.4s;
 transition: all 0.4s;
}
.touch-move-active .content,
.touch-move-active .del {
 -webkit-transform: translateX(0);
 transform: translateX(0);
}

3、js 注释很详细

var app = getApp()
Page({
 data: {
  items: [],
  startX: 0, //开始坐标
  startY: 0
 },
 onLoad: function () {
  for (var i = 0; i < 10; i++) {
   this.data.items.push({
    content: i + " 向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦",
    isTouchMove: false //默认全隐藏删除
   })
  }
  this.setData({
   items: this.data.items
  })
 },
 //手指触摸动作开始 记录起点X坐标
 touchstart: function (e) {
  //开始触摸时 重置所有删除
  this.data.items.forEach(function (v, i) {
   if (v.isTouchMove)//只操作为true的
    v.isTouchMove = false;
  })
  this.setData({
   startX: e.changedTouches[0].clientX,
   startY: e.changedTouches[0].clientY,
   items: this.data.items
  })
 },
 //滑动事件处理
 touchmove: function (e) {
  var that = this,
   index = e.currentTarget.dataset.index,//当前索引
   startX = that.data.startX,//开始X坐标
   startY = that.data.startY,//开始Y坐标
   touchMoveX = e.changedTouches[0].clientX,//滑动变化坐标
   touchMoveY = e.changedTouches[0].clientY,//滑动变化坐标
   //获取滑动角度
   angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });
  that.data.items.forEach(function (v, i) {
   v.isTouchMove = false
   //滑动超过30度角 return
   if (Math.abs(angle) > 30) return;
   if (i == index) {
    if (touchMoveX > startX) //右滑
     v.isTouchMove = false
    else //左滑
     v.isTouchMove = true
   }
  })
  //更新数据
  that.setData({
   items: that.data.items
  })
 },
 /**
  * 计算滑动角度
  * @param {Object} start 起点坐标
  * @param {Object} end 终点坐标
  */
 angle: function (start, end) {
  var _X = end.X - start.X,
   _Y = end.Y - start.Y
  //返回角度 /Math.atan()返回数字的反正切值
  return 360 * Math.atan(_Y / _X) / (2 * Math.PI);
 },
 //删除事件
 del: function (e) {
  this.data.items.splice(e.currentTarget.dataset.index, 1)
  this.setData({
   items: this.data.items
  })
 }
})

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jQuery弹出(alert)select选择的值
Apr 21 Javascript
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
JQuery中使用on方法绑定hover事件实例
Dec 09 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
详解js常用分割取字符串的方法
May 15 Javascript
小程序实现上下移动切换位置
Sep 23 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 Javascript
Vue实现手机计算器
Aug 17 Javascript
react中的DOM操作实现
Jun 30 Javascript
常用的js方法合集
Mar 10 #Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 #Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
Mar 10 #Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 #Javascript
js实现产品缩略图效果
Mar 10 #Javascript
BootStrap注意事项小结(五)表单
Mar 10 #Javascript
微信小程序 弹框和模态框实现代码
Mar 10 #Javascript
You might like
php htmlspecialchars加强版
2010/02/16 PHP
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php实现的xml操作类
2016/01/15 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python实现定时任务
2017/02/08 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Python流程控制语句的深入讲解
2020/06/15 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
幼儿园春游活动方案
2014/01/19 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
中考冲刺决心书
2014/03/11 职场文书
授权委托书格式范文
2014/08/02 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android