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


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 相关文章推荐
js 创建书签小工具之理论
Feb 25 Javascript
用js写了一个类似php的print_r输出换行功能
Feb 18 Javascript
caller和callee的区别介绍及演示结果
Mar 10 Javascript
javascript基础之查找元素的详细介绍(访问节点)
Jul 05 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 Javascript
浅谈一个webpack构建速度优化误区
Jun 24 Javascript
JS中自定义事件的使用与触发操作实例分析
Nov 01 Javascript
js实现时钟定时器
Mar 26 Javascript
three.js 如何制作魔方
Jul 31 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP临时文件的安全性分析
2014/07/04 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
介绍一下RMI的基本概念
2016/12/17 面试题
秘书英文求职信范文
2014/01/31 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书