click
click是手指触碰屏幕和离开屏幕的偏移量很小情况下并在短时间内执行而发生的事件,用于移动端会有200到300毫秒的延时
要模拟click事件,touchstart、touchmove、touchend必须结合使用,通过touchstart、touchend纪录时间、手指移动的偏移量,符合click标准则触发click事件。而现有的解决方案FastClick就是这么做的。
1 | $(function(){ |
移动端的click300ms延迟现象:移动端的click事件300ms延迟是因为浏览器为了判断当前事件是否双击(double click)而在触发touchend事件后等待用户约300ms(双击事件可以缩放视图内容),若用户没有再次点击则默认触发click事件。
用户点击触发事件的过程:touchstart -> touchmove(没有移动则不触发) -> touchend ->(300ms后) click
事件对象及兼容
1 | 事件对象:e = e || window.event; |
touch 类事件
属于原生移动端事件
1 | touchstart: 当手指触摸到屏幕会触发; |
Touch对象代表一个触点,可以通过event.touches[0]获取,每个触点包含位置,大小,形状,压力大小,和目标 element属性。
事件对象及兼容
1 | touches:表示当前跟踪的触摸操作的touch对象的数组。 |
关于touch的滑动事件
1 | ele.addEventListener('touchstart', start, false); |
tap
属于第三方事件,需要引入第三方库,比如zepto.js
常用的方法有tap,singleTap, doubleTap, longTap分别代表点击、单次点击、双次点击、长按。
tap封装了touchstart、touchmove、touchend三个事件的处理(touchstart之后如果有产生touchmove则取消此次tap事件的产生)click则只是单纯的绑定了浏览器的click事件。
1 | bug: tap点透事件。(点击会触发非当前层的点击事件,这就是点透) |
参考: