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


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 相关文章推荐
解决js正则匹配换行问题实现代码
Dec 10 Javascript
JavaScript实现x秒后自动跳转到一个页面
Jan 03 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
轻松掌握JavaScript中的Math object数学对象
May 26 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
VueJS如何引入css或者less文件的一些坑
Apr 25 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
javascript递归函数定义和用法示例分析
Jul 22 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 Javascript
html5调用摄像头截图功能
Jan 18 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 正则表达式常用函数
2014/08/17 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python 26进制计算实现方法
2015/05/28 Python
python常见的格式化输出小结
2016/12/15 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
nohup的用法
2012/11/26 面试题
工作疏忽检讨书
2014/01/25 职场文书
大学新闻系求职信
2014/06/03 职场文书
党员个人总结自评
2015/02/14 职场文书
环保宣传语大全
2015/07/13 职场文书
护士医德医风心得体会
2016/01/25 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server