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


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 相关文章推荐
让IE6支持min-width和max-width的方法
Jun 25 Javascript
Jquery 自定义动画概述及示例
Mar 29 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
Nov 25 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
Nov 03 Javascript
js防刷新的倒计时代码 js倒计时代码
Sep 06 Javascript
JsChart组件使用详解
Mar 04 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
koa源码中promise的解读
Nov 13 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 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
php无限遍历文件夹示例分享
2014/03/04 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
对python中的argv和argc使用详解
2018/12/15 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python实现ip代理池功能示例
2019/07/05 Python
python实现图像外边界跟踪操作
2020/07/13 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
总经理职责范文
2013/11/08 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
英文自荐信
2013/12/19 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
少年闰土教学反思
2014/02/22 职场文书
英文升职感谢信
2015/01/23 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
python使用glob检索文件的操作
2021/05/20 Python
python异常中else的实例用法
2021/06/15 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript