左滑删除效果在app的交互方式中十分流行,比如全民应用微信

微信左滑删除

再比如曾引起很大反响的效率app Clear

Clear左滑删除

从技术上来说,实现这个效果并不困难,响应一下滑动操作,移动一下组件,再加上些坐标计算,状态记录就可以了。也有一些文章介绍了在小程序上如何实现这一效果,不过我基本可以确定这些开发者没有在真机上详细测试,因为经我实践发现,在小程序上想要完美实现这个效果几乎是不可能完成的任务。

这一切要从小程序的事件机制说起。对于滑动类操作,小程序提供了bindcatch两种响应事件的方式,区别在于是否阻止事件冒泡,但却没有提供preventDefault 方法,也就是说无法在程序中动态确定是否阻止某个事件冒泡。

然后再说一下小程序的另一个特性,这个特性只在真机上有效,那就是框架默认为page提供了垂直方向的滚动效果,无需写一行代码,并且小程序还贴心的提供了onPullDownRefreshonReachBottom,嗯,一切都很完美。

然后当这些特性遇到左滑效果,那就尴尬了。完美的左滑删除效果,当判定为水平滑动时,要忽略用户垂直方向上的移动(毕竟不能指望用户的手指不会上下抖动吧)。然而因为没有preventDefault方法,要么catch住滑动事件,要么你就只能期待用户的手指严格水平滑动了。

由于上述原因,在我见到的小程序中,几乎没有使用左滑删除操作的,说几乎是因为确实有一款实现了该效果,印象微笔记清单

印象微笔记清单

可以看到在左滑时页面也会同时上下滚动,体验并不好。(顺便说一句,印象微笔记清单早起版本使用scroll-view实现该效果,体验就更差了)

当然,也可以catch滑动事件,不过这样水平滑动时没问题,垂直滑动时你也不会看到任何反应了。

当我发现这些问题时感到十分沮丧,不过我想问题的核心就是要能动态阻止页面垂直滚动。而除了view之外,scroll-view也具备垂直滚动的能力,并且还有一个属性scroll-y Boolean false 允许纵向滚动。是的,我想你们也想到了,只要在合适的条件下动态设置该属性,那就应该可以实现想要的效果了。

从实现上来讲,应该首先禁用垂直滚动,在判定用户为垂直操作后激活该属性,嗯,完美。但事实又一次打了我的脸,在touchmove事件中激活该属性并不能激活垂直滚动效果。

那就反过来,首先激活垂直滚动,在判定水平操作后禁用该属性。嗯,实践证明该方法可行,但仍然有问题。在我们判定滑动方向之前,用户很有可能在垂直方向有移动,虽然很微小,但依然会感受到页面的上下滚动。

下面是我按照该思路实现的仿微信首页效果

左滑删除

在后续的文章中,我会展示另一种实现该效果的方法,可以完美消除页面垂直滚动问题,不过仍然会有其它限制。

最后是源码地址, 感兴趣的同学可以下载体验。小程序相关源码及视频教程下载

微信小程序实现左滑删除源码的更多相关文章

  1. 微信小程序实现左滑删除效果(原生/uni-app)

    实现效果 列表中侧滑删除 删除不同时存在 scrollview上下滑动与侧滑删除不影响 uni-app实现 html部分 <template> <scroll-view :scrol ...

  2. 微信小程序商城 带java后台源码

    微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 myb ...

  3. 微信小程序demo——入门级(附源码)

    最近小程序又蠢蠢欲动,出了一个公众号绑定小程序功能,目测不错,就看了下微信小程序文档,顺便写了几行代码,后续有空会持续更新维护. 源码:https://github.com/SibreiaDante/ ...

  4. 微信小程序支付,带java源码

    先说下这个的背景吧... 本人是做java后端的,自认为还有很大的发展空间(嘻嘻,你懂的),看过一段时间的小程序可是没有支付成功...最近公司要做小程序项目,老大让我看下小程序,折腾了好几天,参照着h ...

  5. 微信小程序 - 反编译线上源码

    github地址:https://github.com/qwerty472123/wxappUnpacker 不过我好像从来未成功过哈,TX地图+.TX公交都失败了 点击下载以上两个文件 哦,对了,你 ...

  6. 微信小程序使用场景延伸:扫码登录、扫码支付

    微信小程序使用场景延伸:扫码登录.扫码支付 小程序最适合的使用场景有哪些?相比大家能列举出来很多,但这个场景,大家可能多数没想到_^ 笔者团队近期接到了一个PC项目:转转游戏租号PC官网,该项目要求在 ...

  7. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  8. Taro UI开发小程序实现左滑喜欢右滑不喜欢效果

    前言:年后入职了一家新公司,与前同事交接完之后,发现公司有一个四端的项目(iOS,Android,H5,小程序),iOS和安卓都实现了左滑右滑的效果,而h5和小程序端没实现,询问得知前同事因网上没找到 ...

  9. 微信小程序实现左侧滑栏

    前言 一直想给项目中的小程序设置侧滑栏,将退出按钮放到侧滑中,但是小程序没有提供相应的控件和API,因此只能自己手动实现,网上很多大神造的轮子很不错,本文就在是站在巨人的肩膀上实现. 效果 先看看效果 ...

随机推荐

  1. 字典的setdefault() 和get()方法比较

    Python 字典 setdefault() 函数 和get() 类似: 如果键存在字典中,返回其value值 如果键不存在字典中,创建键值对.完后,返回值为默认值. 话不多说,上栗子: setdef ...

  2. python实现将IP地址转换为数字

    话不多说,直接代码 ip_addr='192.168.2.10' # transfer ip to int def ip2long(ip): ip_list=ip.split('.') result= ...

  3. 使用 Dojo 掌握面向对象开发

    原文出处:Joe Lennon 从头开始学习 Dojo,第 2 部分 使用 Dojo 掌握面向对象开发 什么是面向对象开发? 面向对象编程(Object-Oriented Programming,OO ...

  4. httpclient4.5 连接池的封装

    随着微服务的流行,服务之间的http调用越来越多,遇到的问题也比较多,写这边文章的目的也是将自己遇到的坑和解决方案跟大家分享 一.为什么要用Http连接池 1.降低延迟:如果不采用连接池,每次连接发起 ...

  5. List(JDK1.7)(1)

    java.util包. 与Set不同, List允许重复的元素.即 e1.equals(e2). 部分方法定义 int size(); 返回列表中元素的个数,如果超过Integer.MAX_VALUE ...

  6. 视差滚动(Parallax Scrolling)的一点小心得

    下面内容来源于我知乎的这个答案:http://www.zhihu.com/question/20990029/answer/21436067 假期有空,整理到博客园这边,并做了一些语境的调整. ——— ...

  7. Windows上安装QT4后更改MinGW的路径

    在windows上安装使用MinGW的QT4时,并不会一起安装MinGW. 在安装过程中,会让你指定已经安装的MinGW的路径. 当你使用QT4时,将使用你指定的MinGW的路径下的g++来编译构建程 ...

  8. 20155209 2016-2017-2 《Java程序设计》第五周学习总结

    20155209 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外. catch语句的参 ...

  9. td自动换行

    自动换行方法: 1.在<td>中设置样式style为word-wrap:break-word;word-break:break-all; (一般情况只需要设置word-break:brea ...

  10. NYOJ 116 士兵杀敌(二) (树状数组)

    题目链接 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的.小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧.南将军的某次询问之后 ...