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


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对表单的操作代码集合
Apr 06 Javascript
自己封装的javascript事件队列函数版
Jun 12 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
javascript滚轮事件基础实例讲解(37)
Feb 14 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
Dec 11 Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 Javascript
JavaScript使用localStorage存储数据
Sep 25 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
常用的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
ajax php 实现写入数据库
2009/09/02 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python socket服务常用操作代码实例
2020/06/22 Python
python中pyplot基础图标函数整理
2020/11/10 Python
python中count函数知识点浅析
2020/12/17 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
体育口号大全
2014/06/18 职场文书
社会工作专业求职信
2014/07/15 职场文书
导游词欢迎词
2015/02/02 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫