touch事件

移动开发过程之中,涉及到touch事件的情况特别多,比如按下,按起,滑动。这些事件在不同的设备之中存在差异。

组件

之前的滑动处理我都是自己去写的,没有使用第三方的组件。看了一篇文章介绍,提到了三个组件:

  • hammer.js
  • zepto
  • appframework
    这三个都对touch进行了处理,第一个是专门的触屏手势处理框架,功能很强大。其他两个,据说zepto的会好一点,虽然appframework自己说是对zepto的touch进行了修改和提升。

事件顺序

没有touch的时候: mousedown -> mouseup -> click。

有touch的时候:touchstart -> touchmove -> touchend。

都有的时候:

  • 点击操作: touchstart -> touchend -> mousedown -> mouseup -> click
  • 移动的时候: touchstart -> touchmove -> touchend

安卓设备下swipe很难触发

这是安卓的一个老问题了.谷歌一下 类似zepto android swipe的关键字,就能发现不少.很多项目中的issue都能找到这个问题,连安卓自身项目里都有相关issue(链接要翻墙)。

解决方法就是在touchstart或touchmove事件中,主动调用e.preventDefault()。

滑动方向的问题

以上下滑动为主的操作,有可能触发swipeLeft/Right事件,而不是swipeUp/Down事件.这个主要是因为native scroll的一些特性,导致算距离时竖向的距离可能会很小,而上下滑的最后,一般会有一个横向滑动的连带动作,导致deltaX>deltaY,从而判断出错.

最后说一下,还是慎用左右滑动的设计,一是兼容性问题.二是,微信等app是手机网页主要的入口,而从左向右的滑动,很容易关闭页面.

参考资料

原文: https://leohxj.gitbooks.io/front-end-database/content/problems-in-develop-webapp/event-touch.html