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


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 相关文章推荐
xml和web特殊字符
Apr 28 Javascript
Extjs学习笔记之二 初识Extjs之Form
Jan 07 Javascript
jQuery UI-Draggable 参数集合
Jan 10 Javascript
Javascript事件实例详解
Nov 06 Javascript
jQuery对table表格进行增删改查
Dec 22 Javascript
基于bootstrap实现多个下拉框同时搜索功能
Jul 19 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
vue项目中使用百度地图的方法
Jun 08 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php数组添加元素方法小结
2014/12/20 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
javascript 闭包详解
2015/02/15 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
浅析Python多线程下的变量问题
2015/04/28 Python
TensorFlow的权值更新方法
2018/06/14 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
工程技术员岗位职责
2014/03/02 职场文书
教师对学生的评语
2014/04/28 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫