ios上safari的事件模型(一)
safari在desktop端和mobile端大部分的功能都是一樣,我們重點說下差別在什麼地方,以及這些差別所引起的問題。我們知道ios在mobile端增加了觸摸的功能,觸摸功能肯定要用到手指的操作,這個是和desktop端有很大區別的。當我們用手指操作的時候,可能用到一個手指,兩個手指或者多個手指,同時手指觸摸到不同的dom元素會引起什麼不同的行為,我們主要圍繞這些問題展開。
名詞解釋:
clickable元素:link,form,image和擁有mousemove, mousedown, mouseup, or onclick處理器的其他元素;
scrollable元素:text area,iframe和擁有overflow樣式的其他元素;
一個手指操作時的事件
當一個手指按住屏幕並且在屏幕上移動不會發生任何事件,直到停止移動,會有onscroll事件產生,然後頁麵重繪,如下圖:
當一個手指快速的在屏幕上雙擊,也不會產生任何事件,如下圖:
當一個手指點擊一個 nonclickable元素時,不會產生任何事件;如果點擊的是一個clickable元素,事件發生的順序為mouseover, mousemove, mousedown, mouseup, and click,但再點擊到另外一個clickable元素時,會發生mouseout事件,如果在mousemove事件發生時有頁麵的內容發生變化,就不會有後續的事件發生,如下圖:
兩個手指操作時的事件
當兩個手指在屏幕上使用捏住或者分開的手勢時,不發生任何鼠標事件,如下圖
當兩個手指按住一個 scrollable元素,並且同時移動兩個手指, mousewheel 事件產生;如果元素不是scrollable元素,不產生事件;當停止移動時,onscroll事件產生,如下圖:
多點觸摸事件
我們是可以使用javascript dom中的touch event類,來控製多點觸摸和手勢事件,主要通過下麵幾個事件來控製:
- touchstart - 當touch事件初始化觸發. 等同於 mouseDown事件
- touchmove - 當touch移動時觸發,等同於 mouseMove事件
- touchend - 當touch結束時觸發,等同於mouseUp.
發生事件的 event對象會包含下麵的數組:
- touches - 包含touchstart,touchmove事件的信息
- targetTouches - 包含綁定touch事件的元素的信息,和touches區別,見這裏
- changedTouches - 包含所有touch事件的信息
數組中中每個對象是一個touch對象,其就是safari裏定義的一個對象,但是這裏這個對象不等同於實際觸摸點擊的html元素,主要會包括如下屬性:
pageX 相對於父元素的x坐標
pageY 相對於父元素的y坐標
clientX 相對於當前窗口的x坐標
clientY 相對於當前窗口的y坐標
identifier 都是一些數字,用法暫時還不清楚
screenX 相對於當前屏幕的x坐標
screenY 相對於當前屏幕的y坐標
target 指代當前點擊的對象
手勢事件
多點觸摸事件可以模擬手勢事件,如放大,旋轉等,主要包括下麵幾個api
- gesturestart -當多點觸摸初始化時觸發
- gesturechange - 等多點觸摸移動時觸發
- gestureend - 當多點觸摸結束時觸發
手勢事件的對象中沒有touch對象,他會包含scale,rotation這樣的屬性;
如:document.addEventListener('gesturechange', function(event) {
event.preventDefault();
console.log("Scale: " + event.scale + ", Rotation: " + event.rotation);
}, false);
這裏對ios中的safari的事件模型做了一個全麵的介紹,那麼使用過程中會遇到哪些問題,以及具體的解決方案我們會在下篇文章介紹
參考:
JavaScript Touch and Gesture Events iPhone and Android
Touching and Gesturing on the iPhone
最後更新:2017-04-02 16:47:59
上一篇:
MyEclipse中文件被外編輯器修改後需要在MyEclipse中refresh
下一篇:
二進製兼容原理 - C/C++ &Java
java中一個漢字和一個字母所占內存字節比較以及後台驗證的減半處理
MySQL · 源碼分析 · 一條insert語句的執行過程
ListActivity+sqlite+SimpleCursorAdapter簡單實例
android 4.0以後對HOME鍵的捕捉
PostgreSQL Oracle 兼容性係列之 - WITH 遞歸 ( connect by )
pythonchallenge_level11
IBM HTTP Server Plugin默認plugin-key.kdb 密鑰數據庫文件默認個人證書密碼過期分析與解決方法
穀歌打壓阿裏雲強化Android控製權
企業網站站內優化注意事項
Hadoop 這樣業界頂級的大規模數據處理平台,均發現滿足不了類似雙十一這樣全世界的剁手黨蜂擁而至的熱情