微信小程序实现滑动操作代码


Posted in Javascript onApril 23, 2020

前言

本文使用动画组件wx.createAnimation来实现滑动操作:

1. 左滑动显示操作项区域;

2. 点击操作项触发相应方法;

3. 右滑动和点击行收起操作项;

4. 点击“删除”并确定则删除该条数据。

最终效果如下:

微信小程序实现滑动操作代码

实现过程

1. 文件index.wxml和index.wxss代码如下,这一块比较简单,可自行查看,不做过多分析;

Tips:“详情”、“取号”和“删除”点击触发使用catchtap,阻止冒泡事件向上冒泡;

<view class="wrapper">
 <view class="container">
  <view class="list">
   <view class="line" bindtouchstart="touchstartX" bindtap="resetX" bindtouchmove="touchmoveX" bindtouchend="touchendX" animation="{{currentIndex === index ?animation : ''}}" data-index="{{index}}" wx:for="{{recordList}}" wx:key="id">
    <image class="icon-title" src="../../images/start_icon.png"></image>
    <view class="mes">
     <view class="title">{{item.title}}</view>
     <view class="date">预约时间:{{item.date}}</view>
     <view class="status">状态:<text>{{item.status}}</text></view>
    </view>
    <view class="operation">
     <view class="detail" catchtap="openDetail">详情</view>
     <view class="number" catchtap="getNumber">取号</view>
     <view class="delete" catchtap="deleteItem">删除</view>
    </view>
   </view>
  </view>
 </view>
</view>
.container .line {
 display: flex;
 padding: 20rpx 30rpx;
 border-bottom: 2rpx solid #ebebeb;
 position: relative;
 cursor: pointer;
}
 
.container .line .icon-title {
 margin-top: 28rpx;
 width: 30rpx;
 height: 30rpx;
}
 
.container .line .mes {
 flex: 1;
 margin-left: 10rpx;
}
 
.container .line .mes .date, .container .line .mes .status {
 color: #9d9d9d;
 font-size: 24rpx;
 margin-top: 4rpx;
}
 
.status text {
 color: #fba500;
}
 
.operation {
 position: absolute;
 top: 0;
 right: -300rpx;
 height: 152rpx;
 text-align: center;
 color: #fff;
 line-height: 152rpx;
 display: flex;
}
 
.operation view {
 width: 100rpx;
}
 
.operation .detail {
 background-color: #018efb;
}
 
.operation .number {
 background-color: #fba500;
}
 
.operation .delete {
 background-color: #cfcfcf;
}

2. 文件index.js存放所有功能的逻辑代码,下面主要分析几个重点方法:

1)方法touchmoveX用于手指触摸后移动时获取移动距离,并根据移动距离动画显示操作项相应区域,使移动有即时效果;

2)方法touchendX用于手指触摸动作结束时,如果移动距离达到100,则动画显示全部操作项区域;如果移动距离未达到100,则收起操作项区域;

3)方法deleteItem用于删除该条数据。

let movedistance = 0;
Page({
 data: {
  currentIndex: 0, // 列表操作项的index
  recordList: [{ // 列表数据
   id: 1,
   title: '业务办理01',
   date: '2020-04-21 10:30-12:00',
   status: '未取号'
  }, {
   id: 2,
   title: '业务办理02',
   date: '2020-04-21 10:30-12:00',
   status: '未取号'
  }, {
   id: 3,
   title: '业务办理03',
   date: '2020-04-21 10:30-12:00',
   status: '取号'
  }]
 },
 // 打开详情页
 openDetail() {
  console.log(this.data.currentIndex, '点击详情');
 },
 // 取号
 getNumber() {
  console.log(this.data.currentIndex, '点击取号');
 },
 // 删除数据
 deleteItem() {
  let that = this;
  let recordList = this.data.recordList;
  wx.showModal({
   title: '提示',
   content: '是否删除该条数据?',
   success(res) {
    if (res.confirm) {
     that.slideAnimation(0, 500);
     recordList.splice(that.data.currentIndex, 1);
     that.setData({
      recordList: recordList
     });
    } else if (res.cancel) {
     console.log('用户点击取消')
    }
   }
  });
 },
 // 手指触摸动作开始
 touchstartX(e) {
  this.setData({
   currentIndex: e.currentTarget.dataset.index
  });
  // 获取触摸X坐标
  this.recordX = e.touches[0].clientX;
 },
 // 点击操作
 resetX() {
  this.slideAnimation(0, 500);
 },
 // 手指触摸后移动
 touchmoveX(e) {
  let currentX = e.touches[0].clientX;
  movedistance = currentX - this.recordX; // 获取移动距离
  this.slideAnimation(movedistance, 500);
 },
 // 手指触摸动作结束
 touchendX() {
  let recordX;
  if (movedistance <= -100) { // 移动达到距离就动画显示全部操作项
   recordX = -300;
  } else if (movedistance >= -100) { // 移动未达到距离即还原
   recordX = 0;
  }
  this.slideAnimation(recordX, 500);
 },
 // 滑动动画
 slideAnimation(recordX, time) {
  let animation = wx.createAnimation({
   duration: time,
   timingFunction: 'ease'
  });
  animation.translate(recordX + 'rpx', 0).step()
  this.setData({
   animation: animation.export()
  })
 },
 onLoad: function(options) {
  wx.setNavigationBarTitle({
   title: '银行业务',
  });
  movedistance = 0; // 解决切换到其它页面再返回该页面动画失效的问题
 }
})

到此这篇关于微信小程序实现滑动操作代码的文章就介绍到这了,更多相关微信小程序滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
jQuery ready函数滥用分析
Feb 16 Javascript
基于jquery实现图片广告轮换效果代码
Jul 07 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
JS函数重载的解决方案
May 13 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
javascript获取网页各种高宽及位置的方法总结
Jul 27 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
Dec 14 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 #Javascript
Vue中通过vue-router实现命名视图的问题
Apr 23 #Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 #Javascript
JS eval代码快速解密实例解析
Apr 23 #Javascript
浅谈vue权限管理实现及流程
Apr 23 #Javascript
js实现简单的贪吃蛇游戏
Apr 23 #Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
Apr 23 #Javascript
You might like
咖啡常见的种类
2021/03/03 新手入门
第五章 php数组操作
2011/12/30 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
简单的自定义php模板引擎
2016/08/26 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
javascript的BOM
2016/05/03 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
python 接口测试response返回数据对比的方法
2018/02/11 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python使用smtplib模块发送邮件
2020/12/17 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
应届毕业生简历自我评价
2014/01/31 职场文书
会计学习心得体会
2014/09/09 职场文书
医德医魂心得体会
2014/09/11 职场文书
海上钢琴师观后感
2015/06/03 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL