前言:

现在很多程序上都有左滑删除的效果,其实实现很简单,今天我们主要来记录一下小程序的左滑删除的实现过程。

效果图:


实现效果:

  1. 当我们在该条记录上进行左滑操作时,整条记录跟着向左移动,同时右侧的删除按钮会显示出来。
  2. 当我们点击删除按钮时,就会把该条记录删除掉。
  3. 如果不想删除该记录,可以右滑取消,或者随意点击一个位置都可以使右侧的删除按钮隐藏回到原样。

设计思路:

  1. 首先在页面上每条 item 记录分为上下两层,上面的 view 包裹正常展示的内容,下面的 view 存放左滑的显示的内容;
  2. 元素移动使用的是 transform 属性;
  3. 这里用到的微信小程序的 api 是 touch 的相关事件:touchstarttouchmove 来实现 view 视图跟随手指移动。 微信小程序 - 事件
  4. touchstart 时,通过clientX, clientY或者pageX, pageY 来监听记录触摸开始时的(x, y)的位置;在 touchMove 中持续监听触摸点(x, y)的位置,并且记录下来。之后再对开始的触摸位置和结束的触摸位置进行逻辑的判断,如果移动距离大于开始的距离,那么就是右滑,将data数据中的isTouchMove 置为 false 不进行展示;如果移动距离小于开始的位置,那么就是左滑,将isTouchMove置为 true,页面中的按钮就会展示出来,可以进行删除等其他操作。

上面就是实现的思路,废话不多说,直接上代码了。

代码实现:

wxml 代码:

// touch.wxml
<view class="records_row" wx:for="{{records}}" wx:key="index"><view class="records_row_content {{item.isTouchMove ? 'touch_move' : ''}}" data-index="{{index}}"bindtouchstart="touchStart" bindtouchmove="touchMove"><view class="records_row_left"></view><view class="records_content"><view class="records_bs">{{item.identification}}</view><view class="records_time">{{item.time}}</view></view><view class="records_del" catchtap="del" data-index="{{index}}">删除</view></view>
</view>

wxss 代码:

.records_row {width: 710rpx;height: 152rpx;background: #FFFFFF;box-shadow: 0px 0px 16rpx 0px #EAEAEA;border-radius: 12rpx;margin-top: 24rpx;margin-left: 20rpx;display: flex;justify-content: space-between;align-items: center;overflow: hidden;
}.records_row_left {width: 8rpx;height: 152rpx;background: #5AC8FF;border-radius: 12rpx 0px 0px 12rpx;margin-right: 30rpx;
}.records_row_content {height: 152rpx;display: flex;flex: 1;font-size: 28rpx;font-weight: 400;color: #333333;padding-right: 58rpx;
}.records_bs {max-width: 604rpx;max-height: 80rpx;display: block;text-overflow: ellipsis;word-wrap: break-word;font-size: 28rpx;font-weight: 400;color: #333333;line-height: 40rpx;overflow: hidden;
}.records_time {font-size: 24rpx;font-weight: 400;color: #999999;line-height: 34rpx;margin-top: 8rpx;
}.records_content {width: 600rpx;display: flex;flex-direction: column;justify-content: center;
}.touch_move .records_content,
.touch_move .records_row_left,
.touch_move .records_del {transform: translateX(-100rpx);
}.touch_move .records_del {transform: translateX(-80rpx);
}.records_del {background-color: #FD7373;width: 150rpx;height: 150rpx;display: flex;flex-direction: column;align-items: center;justify-content: center;color: #fff;transform: translateX(80rpx);transition: all 0.4s;
}/* 如果担心transform的兼容问题,可以再加上 -webkit 前缀,-webkit-transform */

js 代码:(解释的比较清楚,大家可以看看注释)

// pages/touch/touch.js
Page({/*** 页面的初始数据*/data: {records: [{identification: '左滑删除1',time: '2020-11-04 11:02:43',isTouchMove: false //默认隐藏删除}, {identification: '左滑删除2',time: '2020-11-04 11:02:43',isTouchMove: false //默认隐藏删除}, {identification: '左滑删除3',time: '2020-11-04 11:02:43',isTouchMove: false //默认隐藏删除}],startX: 0, // 开始X坐标startY: 0, // 开始Y坐标},// 手指触摸开始事件,记录开始的(X,Y)位置touchStart: function (e) {// 开始触摸时,将 isTouchMove 为 true 的置为 false,开始新的操作this.data.records.forEach(function (item, index) {if (item.isTouchMove)item.isTouchMove = false;})// 更新数据,记录开始的位置this.setData({startX: e.changedTouches[0].clientX,startY: e.changedTouches[0].clientY,records: this.data.records})},// 手指滑动事件touchMove: function (e) {// 定义变量进行数据存储let that = thislet currentIndex = e.currentTarget.dataset.index //当前索引let startX = that.data.startX // 开始X坐标let startY = that.data.startY // 开始Y坐标let touchMoveX = e.changedTouches[0].clientX // 滑动变化X坐标let touchMoveY = e.changedTouches[0].clientY // 滑动变化Y坐标that.data.records.forEach((item, index) => {item.isTouchMove = false// 判断当前点击的是哪一个,进行操作if (index == currentIndex) {if (touchMoveX > startX) // 滑动位置大于开始位置 => 右滑item.isTouchMove = falseelse // => 左滑item.isTouchMove = true}})//更新数据that.setData({records: that.data.records})},// 删除事件del: function (e) {this.data.records.splice(e.currentTarget.dataset.index, 1)this.setData({records: this.data.records})}
})

20201207 更新

今天在看WeUI组件库时,发现新增了几个新的组件(也可能是之前就有,我没有发现),看到在表单组件中有一个 Slideview 组件,是一个左滑删除组件,跟我这个实现功能效果是一样的,所以就拿到这里跟大家一起分析一下。

至于如何使用WeUI组件库组件,不知道的小伙伴请移步至 微信小程序之WeUI组件库的使用 查看。

官方效果:


请看代码:

  1. 首先需要先引入相关的组件
// 在 page.json 中引入该组件
{"usingComponents": {"mp-slideview": "weui-miniprogram/slideview/slideview"}
}// 组件内部实现需要引入的组件
{"usingComponents": {"mp-cells": "../components/cells/cells","mp-cell": "../components/cell/cell","mp-slideview": "../components/slideview/slideview"}
}
  1. page.wxml
<view class="page"><view class="page__hd"><view class="page__title">Slideview</view><view class="page__desc">左滑操作</view></view><view class="page__bd"><view class="weui-cells"><mp-slideview buttons="{{slideButtons}}" bindbuttontap="slideButtonTap"><mp-cell value="左滑可以删除" footer="说明文字"></mp-cell></mp-slideview></view><view class="weui-slidecells"><mp-slideview buttons="{{slideButtons}}" icon="{{true}}" bindbuttontap="slideButtonTap"><view class="weui-slidecell">左滑可以删除(图标Button)</view></mp-slideview></view></view>
</view>
  1. page.js
var base64 = require("../images/base64");
Page({onLoad: function(){this.setData({icon: base64.icon20,slideButtons: [{text: '普通',src: '/page/weui/cell/icon_love.svg', // icon的路径},{text: '普通',extClass: 'test',src: '/page/weui/cell/icon_star.svg', // icon的路径},{type: 'warn',text: '警示',extClass: 'test',src: '/page/weui/cell/icon_del.svg', // icon的路径}],});},slideButtonTap(e) {console.log('slide button tap', e.detail)}
});

以上代码来自官方组件库,有什么问题欢迎大家讨论学习。


就此,小程序的手动左滑删除效果基本实现,还可以在此基础上进行更多的扩展,把它变成一个更加强大的功能。

欢迎大家评论点赞,如果有任何问题欢迎留言讨论,共同进步。

微信小程序之触摸滑动事件案例+Slideview组件【手动左滑删除效果】相关推荐

  1. 微信小程序页面左右滑动事件+回到顶部

    微信小程序提供了页面的上下滚动的事件,在页面的js文件中, page({ onPageScroll(e) { console.log(e.scrollTop) } }) 但是不是滑动事件,滑动事件需要 ...

  2. 第7课 微信小程序实现图片搜索器案例:

    第7课 微信小程序实现图片搜索器案例: 效果图如下: 手机运行效果: 来我们来看看代码的全局样式: 首先在app.json内的pages把需要的index1.index2页面注册 之后我们只需写ind ...

  3. 微信小程序canvas2d使用封装与案例使用

    微信小程序canvas2d使用封装与案例使用,看一下这边封装效果 canvas2d文档:https://www.canvasapi.cn/ 下载地址:https://download.csdn.net ...

  4. 微信小程序实现左侧滑动导航栏

    微信小程序实现左侧滑动导航栏 1.左侧滑动导航栏图如下 2.这是我们左侧滚动栏的代码 wxml <view class='under_line'></view><view ...

  5. 微信小程序 slider双向滑动渐变色

    微信小程序 slider双向滑动渐变色 要求: 两个slider组件,第一个slider组件的选择区域为渐变色,未选择区域为灰色:第二个slider组件的选择区域为灰色,未选择区域为渐变色.无论滑动哪 ...

  6. 《微信小程序:开发入门及案例详解》—— 3.4 小结

    本节书摘来自华章出版社<微信小程序:开发入门及案例详解>一 书中的第3章,第3.4节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.4 小 ...

  7. 微信小程序-tab左右滑动切换

    微信小程序-tab左右滑动切换 一.简介 1.核心思想 二.实现 1.wxml实现 2.js实现 3.wxss实现 三.参考和总结 四.优化 0.效果图 1.每个tab长度自适应 2.先前隔tab点击 ...

  8. 微信小程序的启动和渲染过程(加组件分类和组件的基本使用以及API分类)

    文章目录 导航路线 小程序的启动过程 小程序页面渲染的过程 小程序中组件的分类有九大类 常用的视图容器类组件 小程序宿主环境-API 导航路线 关于微信小程序知识点一共做了六个博客,涵盖大部分内容,有 ...

  9. 微信小程序把玩(十九)radio组件

    原文:微信小程序把玩(十九)radio组件 radio组件为单选组件与radio-group组合使用,使用方式和checkbox没啥区别 主要属性: wxml <!--设置监听器,当点击radi ...

最新文章

  1. bootstrap-fileinput 使用
  2. Openlayers中加载Geoserver切割的EPSG:900913离线瓦片地图并显示
  3. if var matlab,matlab中if 语句后面的判别式不能是算术表达式?或者说变量?
  4. 一句话讲清楚Python的垃圾回收有啥用
  5. 协作安装程序应用一例
  6. (数据分析三板斧)第一斧Numpy-第二节:生成数组、数组属性和切片
  7. Visual Stdio下安装WTL的向导Widzard
  8. 赛锐信息-AMS系列产品简介
  9. mongodb数据结构学习1--增删改查
  10. Activity-GalleryView
  11. origin 2019 刻度线消失的问题
  12. 《暗时间》读书笔记及读后感
  13. 将公式插入WPS/Word中
  14. 2143.replace.favo.xrcch.com Dns劫持解决方案
  15. w ndows10QQ远程,win10系统QQ远程协助无法操作对方电脑的解决办法
  16. 计算机把C盘无法扩展,c盘不能扩展卷【解决教程】
  17. 二进制补码是如何把减法转变为加法的
  18. 【Python】将多个jpg合并成一个pdf
  19. Linux中read详解
  20. 服务器没有响应客户端,socket编程某些服务器对某些客户端没有响应的问题!!...

热门文章

  1. 大学计算机基础钮和荣,挂科重点教师、科目
  2. [经验分享]我需要参加嵌入式开发培训班么?
  3. 国外电子书免费下载网站
  4. 快速复制备份多个文件,覆盖过重复的文件
  5. 安卓机更新系统会卡吗_安卓手机升级系统会变卡吗
  6. C语言课设:学生选修课程系统设计
  7. FOC 电流采样方案对比(单电阻/双电阻/三电阻)
  8. 企业微信H5唤起(打开)微信小程序
  9. shopee的零食柜
  10. Neutrino追问AMA第8期|Nervos COO 吕国宁:我们的目标是做最好的 Layer 1 主链