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


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移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
微信小程序 特效菜单抽屉效果实例代码
Jan 11 Javascript
Angularjs中使用layDate日期控件示例
Jan 11 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
Aug 10 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 Javascript
手把手教您实现react异步加载高阶组件
Apr 07 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 文件缓存的性能测试
2010/04/25 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
PHP Reflection API详解
2015/05/12 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
jQuery总体架构的理解分析
2011/03/07 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
详解如何设置Python环境变量?
2019/05/13 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
环保建议书
2014/03/12 职场文书
关于环保的建议书
2014/05/12 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
z-index不起作用
2021/03/31 HTML / CSS
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android