1. 程式人生 > >一些關於web移動端的觸控事件的總結

一些關於web移動端的觸控事件的總結

之前在寫網頁小遊戲的時候,考慮了當使用者在移動端裝置上玩遊戲的情況,所以接觸到了移動端的觸碰事件,下面總結一些經驗給大家參考,如有問題,敬請指正。

關於觸控事件,w3c有相應的標準,可以參考https://www.w3.org/TR/touch-events/

下面介紹幾種普遍使用的觸控事件:

1、touchstart

w3c的標準是這樣解釋的:when the user places a touch point on the touch surface.也就是當用戶手指觸控式螢幕幕的瞬間觸發,其實從單詞角度也非常容易理解就是觸控開始時觸發。

2、touchend

相對於touchstart,touchend就是在觸控結束時觸發。

w3c的描述是這樣的: when the user removes a touch point from the touch surface, also including cases where the touch point physically leaves the touch surface, such as being dragged off of the screen.

w3c的描述中提到兩種情況可認為是觸發了觸控結束事件:

(1)當用戶將手指擡起,使用者的手指離開裝置螢幕

(2)當觸控點到了使用者螢幕以外也就是當用戶手指從螢幕上一直移動,直到移出了螢幕邊緣

3、touchmove

使用者移動手指的過程中連續觸發,w3c定義:when the user moves a touch point along the touch surface,當用戶沿著觸控面移動觸控點時觸發。

4、touchcancel
就是取消觸控事件,當有更高級別的事件發生時觸發,比如有電話打進來,但是不同瀏覽器會有不同的含義。

其他事件

touchenter、touchleave

規範中曾經包含這兩個事件,但現在沒有了,這兩個事件是在使用者手指移入或移出某個元素時觸發,但是大多數情況這兩個事件並沒有被實現。IE瀏覽器支援這兩個事件。

每個觸控事件都包含三個列表,每個列表裡包含了對應的觸控點:

(1)touches:包含了當前位於螢幕上的所有觸控點

(2)targetTouches:包含了當前位於DOM元素上的所有觸控點

(3)changedTouches:包含了關聯當前事件的觸控點

而且每個觸控點又包含了以下屬性:

(1)identifier:當前觸控點的編號,唯一的

(2)target:手指所觸控的DOM元素

(3)pageX:相對於頁面的x座標

(4)pageY:相對於頁面的y座標

(5)clientX:相對於視區的x座標,也就是當事件被觸發時滑鼠指標相對於瀏覽器頁面的水平座標

(6)clientY:相對於視區的y座標,也就是當事件被觸發時滑鼠指標相對於瀏覽器頁面的垂直座標

(7)screenX:相對於螢幕的x座標

(8)screenY:相對於螢幕的y座標

要注意的是,裝置上的座標系不同於數學中的座標系:

螢幕座標系的原點在螢幕的最左上方,向右方向為x軸的正方向,向下方向為y軸的正方向

這些觸控事件的使用的示例程式碼:

document.addEventListener('touchstart',function(event){
    var startx = event.touches[0].pageX;
    var starty = event.touches[0].pageY;
    
});
document.addEventListener('touchend',function(event){
    var endx = event.changedTouches[0].pageX;
    var endy = event.changedTouches[0].pageY;
}
document.addEventListener('touchmove',function(event){
	event.preventDefault();//阻止預設行為的發生
});

支援觸控事件的瀏覽器包括iOS版Safari、Android版WebKit、beta版Dolfin、OS6+中的BlackBerry WebKit、Opera Mobile 10.1和LG專有OS中的phantom瀏覽器。目前只有IOS版Safari支援多點觸屏。桌面版Firefox 6+和Chrome也支援觸控事件。