移动端事件 touchstart 手指触摸屏幕时触发,即使已经有手指在屏幕上也会触发。 touchmove 手指在屏幕滑动时触发。 touchend 手指从屏幕时移开时触发。

touchstart会先于click事件执行

touchstart 和 click 的问题: 有些 PC 设备屏幕为触摸屏,同时支持touchstart和click事件; 用户触发touchstart事件,默认必然会导致触发click事件,但是触发click事件,不一定会导致touchstart事件被触发; 此类设备外接鼠标时,通过上面的绑定方式,会绑定touchstart事件,但是鼠标操作只能触发click,导致touchstart不触发

万全之策

通过UA判断设备是否为移动端,再确认事件类型

其实最好的方案是不要在绑定的时候进行判断,而是对touchstart和click同时绑定,但是在touchstart触发的时候暂时取消后续 click 的响应。 在touchstart事件响应中调用preventDefault()方法,阻止后续click事件的触发 在touchstart事件中设置一些标记,或者取消click事件的绑定,使得click事件触发时不会触发我们绑定的逻辑,在一段时间(例如300-500ms)后再恢复 直接对事件处理函数进行节流(throttle),保证在一段时间内(300ms - 500ms),事件处理函数只触发一次

上次更新:
贡献者: 郑壮