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


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 相关文章推荐
很酷的javascript loading效果代码
Jun 18 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
Django使用多数据库的方法
Sep 06 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
JavaScript 2018 中即将迎来的新功能
Sep 21 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
JavaScript多种页面刷新方法小结
Apr 04 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
常用的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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
vue中v-model对select的绑定操作
2020/08/31 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
Python虚拟环境项目实例
2017/11/20 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Django的性能优化实现解析
2019/07/30 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python生成器推导式用法简单示例
2019/10/08 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
校园广播稿500字
2014/02/04 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
保护环境倡议书范文
2014/05/13 职场文书
爱与责任演讲稿
2014/05/20 职场文书
诚信考试标语
2014/06/24 职场文书
员工生日活动方案
2014/08/24 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android
Python编写冷笑话生成器
2022/04/20 Python