移动端的触屏事件
1.原生触摸事件(touch 类事件)
在移动端,原生触摸事件只有以下三种类型,其他所有的触摸事件都是由这三种事件相结合产生的,例如,上划、下滑、左滑、右滑、双击等等;
这三种原生触摸事件为:
- touchstart:开始触摸
- touchmove:触摸过程中
- touchend:触摸结束
另外,还有一个触摸被系统取消的事件:touchcancel(由更高级的事件打断当前正在执行的移动端事件时,会触发该事件,我们可以在这个事件中保存当前相关的触碰事件操作的数据,以保证用户回到页面后接着刚才断开的位置继续操作);
触摸事件下的一些相关属性
- targetTouches:可获取到事件对象下的触摸点,该属性是一个类数组的结构,同时触发这个事件的手指有几个,则数组中就有几个元素。触摸点的相关坐标数据就存在这些对象中。
- pageX\pageY:坐标系原点在页面的左上角;
- screenX\screenY:坐标系的原点在屏幕的左上角点(不包含操作系统在左上角的组件);
- clientX\clientY:触摸目标在视口中的坐标,原点在视口左上角(适口视用来展示 html 代码的容器);
- targer:保存的是触发事件的标签,使用事件委托时可以通过该属性获取到触发该事件的标签对象;
- identifier:ID 值,唯一标示了手指触摸点,如果手指在屏幕上产生移动(如果有多个触摸点,则可以根据这个 id 值跟踪对应的触摸点);
event 对象:
由于手机端的手指触发不是单个的,所以在 event 里面生成的与触摸有关的数据都是以数组的形式列出来的,有以下三个:
- touches:表示当前跟踪的触摸操作的 touch 对象的数组。当前屏幕上所有触摸点的集合列表
- targetTouches:特定于事件目标的 Touch 对象的数组。绑定事件的那个结点上的触摸点的集合列表
- changedTouches:表示自上次触摸以来发生了什么改变的 Touch 对象的数组。触发事件时改变的触摸点的集合
2.触碰事件(tap 类事件)
触碰事件,我目前还不知道它和 touch 的区别,一般用于代替 click 事件
- tap: 手指碰一下屏幕会触发
- longTap: 手指长按屏幕会触发
- singleTap: 手指碰一下屏幕会触发
- doubleTap: 手指双击屏幕会触发
3.滑动事件(swipe 类事件)
滑动事件
- swipe:手指在屏幕上滑动时会触发
- swipeLeft:手指在屏幕上向左滑动时会触发
- swipeRight:手指在屏幕上向右滑动时会触发
- swipeUp:手指在屏幕上向上滑动时会触发
- swipeDown:手指在屏幕上向下滑动时会触发
4.自定义手势事件 gesture
手势事件只是概念型,目前还没有浏览器原生支持,按照概念可分为 gesturestart gesturechange gestureend 三种事件
- gesturestart:当有两根或多根手指放到屏幕上的时候触发
- gesturechange:当有两根或多根手指在屏幕上,并且有手指移动的时候触发
- gestureend:当倒数第二根手指提起的时候触发,结束 gesture
按照定义,当分别将两根手指放到屏幕上的时候,会有如下顺序的事件触发:
1、第一根手指放下,触发 touchstart
2、第二根手指放下,触发 gesturestart
3、触发第二根手指的 touchstart
4、立即触发 gesturechange
5、手指移动,持续触发 gesturechange
6、第二根手指提起,触发 gestureend,以后将不会再触发 gesturechange
7、触发第二根手指的 touchend
8、触发 touchstart(多根手指在屏幕上,提起一根,会刷新一次全局 touch,重新触发第一根手指的 touchstart)
9、提起第一根手指,触发 touchend