1、Touch事件簡介
在移動終端上的web頁面觸屏時會產生ontouchstart、ontouchmove、ontouchend、ontouchcancel 事件,分別對應了觸屏開始、拖拽及完成觸屏事件和取消。
當按下手指時,觸發ontouchstart。
當移動手指時,觸發ontouchmove。
當移走手指時,觸發ontouchend。
當一些更高級別的事件發生的時候(如電話接入或者彈出信息)會取消當前的touch操作,即觸發ontouchcancel。(一般會在ontouchcancel時暫停游戲、存檔等操作。)
2、Touch事件與Mouse事件的出發關系
在 觸屏操作后,手指提起的一剎那(即發生ontouchend后),系統會判斷接收到事件的element的內容是否被改變。如果內容被改變,接下來的事件都不會觸發,如果沒有改變,會按照mousedown,mouseup,click的順序觸發事件。
3、gesture事件
Gesture 事件,包括手指點擊(click),輕拂 (flick),雙擊(double-click),手指的分開、閉合(scale)、轉動(rotate)等一切手指能在屏幕上做的事情,它只在有兩根或多根手指放在屏幕上的時候觸發,事件處理函數中會得到一個GestureEvent類型的參數,它包含了手指的scale(兩根移動過程中分開的比例)信息和rotation(兩根手指間連線轉動的角度)信息。這個事件是對touch事件的更高層的封裝,和touch一樣,它同樣包括 gesturestart,gesturechange,gestureend。
gesture事件觸發過程:
Step 1、第一根手指放下,觸發touchstart
Step 2、第二根手指放下,觸發gesturestart
Step 3、觸發第二根手指的touchstart
Step 4、立即觸發gesturechange
Step 5、手指移動,持續觸發gesturechange,就像鼠標在屏幕上移動的時候不停觸發mousemove一樣
Step 6、第二根手指提起,觸發gestureend,以后將不會再觸發gesturechange
Step 7、觸發第二根手指的touchend
Step 8、觸發touchstart!注意,多根手指在屏幕上,提起一根,會刷新一次全局touch!重新觸發第一根手指的touchstart
Step 9、提起第一根手指,觸發touchend
touch事件和瀏覽器滾動分析
事件冒泡的順序:element -> document.body -> document.documentElement
不要使用ontouchstart,ontouchmove,ontouchend,ontouchcancel,google瀏覽器模擬時不能正確觸發。
不要使用return false; 很詭異。
想要阻止元素級別的的滾動,在對應的元素上對touchstart或touchmove事件使用e.preventDefault();滑動頁面其它地方,頁面依舊可以滾動。
想要阻止瀏覽器級別的滾動,在document.body或document.documentElement上對touchstart或touchmove事件使用e.preventDefault();此時,頁面完全不能滾動(包括所有滾動元素)。
對touchstart事件使用,e.preventDefault()會使得各種輸入框不能聚焦。
e.stopPropagation(); 能夠阻止事件冒泡,但無論怎么使用都不能阻止滾動。touchstart和touchmove事件和滾動沒什么關系,它只是一個事件。
