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


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 相关文章推荐
javascript生成json数据简单示例分享
Feb 14 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
javascript常用的方法分享
Jul 01 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
AngularJS 视图详解及示例代码
Aug 17 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
JS实现按钮添加背景音乐示例代码
Oct 17 Javascript
Vue页面骨架屏的实现方法
May 22 Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 Javascript
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
微信小程序图片右边加两行文字的代码
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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解Python中最难理解的点-装饰器
2017/04/03 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
运动会领导邀请函
2014/01/10 职场文书
大专生找工作自荐书
2014/06/10 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
幼儿园教师求职信
2015/03/20 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
财务人员入职担保书
2015/09/22 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server