移動端的觸屏事件
1拧揽、事件類型
PC端一般使用mousedown剃盾、mousemove腺占、mouseup
相應(yīng)的移動端使用 touchstart淤袜、touchmove、touchend
2衰伯、事件對象獲取相對于頁面坐標(biāo):
- 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中在移動端獲取坐標(biāo)建議添加originalEvent
也就是建議移動端:
touchstart事件和touchmove事件使用 e.originalEvent.targetTouches[0].pageX
touchend事件使用 e.originalEvent.changedTouches[0].pageX
3、touches targetTouches changedTouches的區(qū)別
- touches: 當(dāng)前屏幕上所有觸摸點的列表;
- targetTouches: 當(dāng)前元素對象上所有觸摸點的列表;
- changedTouches: 手指狀態(tài)發(fā)生了改變的列表
在監(jiān)控對象是某個元素的時候怎顾,targetTouched和touched并沒區(qū)別
簡單概括就是:touches读慎、targetTouches是正摸著的手指列表,無論手指剛摸上還是在移動槐雾,這就是為什么touchstart夭委、touchmove事件可以用兩獲取坐標(biāo),而touchend沒法使用的原因
changedTouches是手指狀態(tài)發(fā)生改變了的手指的列表募强,比如手指在滑動株灸,手指離開(接觸--轉(zhuǎn)為離開狀態(tài))崇摄,手指觸摸上,這都是狀態(tài)的改變慌烧。
概括為:手指摸上逐抑、滑動,三個值都有
但是手指離開的時候只有changedTouches!
4.touchmove事件對象的獲取
touchmove事件觸發(fā)時候往往涉及阻止默認(rèn)行為e.preventDefault()
但是想要在touchmove:function(e,參數(shù)一)加一個參數(shù)屹蚊,結(jié)果直接使用e.preventDefault()就會 e 報錯厕氨,處理方法為使用arguments[0]獲取event參數(shù)
touchmove:function(e,參數(shù)一){
var e=arguments[0]
e.preventDefault()
}