触摸和指针事件
最后更新于:2022-04-01 03:16:23
本章的前三节在[InfoQ网站](http://www.infoq.com/cn/articles/touch-pointer-event)上有转载。
触摸事件为苹果发明,它将触摸和鼠标两种行为区分开,而微软的指针事件则将它们合并,此标准更具前瞻性,现已~~加入肯德基豪华套餐~~被W3C采纳为正式标准。
## 触摸事件
1. touchstart
2. touchmove
3. touchend
4. touchcancel (不太被使用)
手势事件:两个或多个触摸事件同时发生。仅Safari和IE支持,不建议使用。
## 实例
通过实例对比触摸、指针事件与鼠标键盘事件。
* 下拉菜单。对于用mouseover的下拉菜单,触摸几乎不可用。
* 拖拽。触摸和鼠标差不多,键盘难操作。
* 滚动层。鼠标难操作。
## 指针事件
指针事件合并了触摸和鼠标操作,它的必要性在于有一些超极本、平板电脑(Surface系列)同时支持触摸和鼠标操作,并且需要在两者间进行无缝的切换。
* pointerdown
* pointermove
* pointerup
* pointerover
* pointerout
## 触摸事件的级联
移动浏览器同时支持触摸事件和鼠标事件,会导致一个触摸动作触发多个事件。
* 触摸(Tap):touchstart/pointerdown、touchend/pointerup、mouseover、mousemove、mousedown、mouseup、click、:hover样式(需要注意的是为了兼容mouseover,抬起手指并不会触发mouseout,再次触摸才会)
* 滑动(Swipe):touchstart、touchmove、touchend、scroll
* 缩放(Pinch):touchstart、touchmove、touchend、scroll,可能还有resize
* 双触(double-tap):touchstart、两次touchend、scroll,可能还有resize
* 按住(touchhold):touchstart、touchend,有些浏览器还有contextmenu
## 剖析click
300毫秒问题,无解。(Chrome支持但苹果不可能支持)
## 使用指针事件
事实上因为兼容性问题,直到现在指针事件仍是不可用的,最好还是用苹果的触摸事件。