移动端的触屏事件
1、事件类型
PC端一般使用mousedown、mousemove、mouseup
相应的移动端使用 touchstart、touchmove、touchend
2、事件对象获取相对于页面坐标:
- mousedown、mousemove、mouseup 使用 e.pageX e.pageY
- touchstar、touchmove 使用 e.touches[0].pageX 或者 e.targetTouches[0].pageX 或者 e.changedTouches[0].pageX. 建议使用e.targetTouches[0].pageX
touchend 只能用e.changedTouches[0].pageX 原因是在touchend事件中事件对象e的touches列表和targetTouches触摸列表的长度为0.使用e.targetTouches[0].pageX,e.touches[0].pageX 取得的值是undefined! -
对于jQuery中在移动端获取坐标建议添加originalEvent
也就是建议移动端:
touchstart事件和touchmove事件使用 e.originalEvent.targetTouches[0].pageX
touchend事件使用 e.originalEvent.changedTouches[0].pageX
3、touches targetTouches changedTouches的区别
- touches: 当前屏幕上所有触摸点的列表;
- targetTouches: 当前元素对象上所有触摸点的列表;
- changedTouches: 手指状态发生了改变的列表
在监控对象是某个元素的时候,targetTouched和touched并没区别
简单概括就是:touches、targetTouches是正摸着的手指列表,无论手指刚摸上还是在移动,这就是为什么touchstart、touchmove事件可以用两获取坐标,而touchend没法使用的原因
changedTouches是手指状态发生改变了的手指的列表,比如手指在滑动,手指离开(接触--转为离开状态),手指触摸上,这都是状态的改变。
概括为:手指摸上、滑动,三个值都有
但是手指离开的时候只有changedTouches!
4.touchmove事件对象的获取
touchmove事件触发时候往往涉及阻止默认行为e.preventDefault()
但是想要在touchmove:function(e,参数一)加一个参数,结果直接使用e.preventDefault()就会 e 报错,处理方法为使用arguments[0]获取event参数
touchmove:function(e,参数一){
var e=arguments[0]
e.preventDefault()
}