觸控事件(touch)
在 jQuery Mobile 中有一些觸控事件是可自訂的。然而,這些事件僅當與支援觸控功能的裝置互動的使用者造訪您的 jQuery Mobile 網站時才可用。當這些事件可用時,您可以觸發任何自訂java script 作為對五個不同的事件的回應tap、taphold、swipe、swipeleft 和 swiperight。
tap(輕擊):一次快速完整的輕擊後觸發
taphold(輕擊不放):輕擊並不放(約一秒)後觸發
swipe(滑動):一秒內水平拖曳大於30PX,或縱向拖曳小於20px的事件發生時觸發的事件。多久拖曳多少px可以設定的。這個事件有其相關聯的屬性,分別為
scrollSupressionThreshold (預設: 10px) – 水平方向拖曳大於這個值,將不會觸發。
durationThreshold (預設: 1000ms) – 滑動時間超過這個數值就不會產生滑動事件。
horizontalDistanceThreshold (預設: 30px) – 水平劃動距離超過這個數值才會產生滑動事件。
verticalDistanceThreshold (預設: 75px) – 垂直劃動距離小於這個數值才會產生滑動事件。
swipeleft(左劃):劃動事件為向左的方向時觸發
swiperight(右劃):劃動事件為向右的方向時觸發
要綁定這些事件,只需要在document.ready()中進行程式設計即可,如下程式碼範例:
<!DOCTYPE HTML> <html> <head> <title>Understanding the jQuery Mobile API</title> <link rel="stylesheet" href="jquery.mobile.css" /> <script src="jquery.js"></script> <script type="text/java script"> $(document).ready(function(){ $(".tap-hold-test").bind("taphold", function(event) { $(this).html("Tapped and held"); }); }); </script> <script src="jquery.mobile.js"></script> </head> <body> <div data-role="page" id="my-page"> <div data-role="header"> <h1>Header</h1> </div> <div data-role="content"> <ul data-role="listview" id="my-list"> <li class="tap-hold-test">Tap and hold test</li> </ul> </div> </div> </body> </html>
從上面的程式碼可以看到,將一個list列表跟taphold事件進行了綁定,當DOM載入完畢後,當觸發taphold事件後,就會顯示Tapped and held的提示訊息。
虛擬滑鼠事件
我們提供了一系列"虛擬的"滑鼠事件試圖把滑鼠和觸控事件抽象化 出來。這使得開發者能夠給予一些基礎的滑鼠事件,例如mousedown, mousemove, mouseup, 和click來註冊監聽。插件會在觸控環境中,插件會保持在傳統滑鼠環境下觸發的順序,例如:vmouseup總是在vmousedown之前被觸發,vmousedown總是在 vmouseup 之前,等等。虛擬滑鼠事件也會把書劍中放出的座標信 息標準化。所以在基於觸控的裝置中事件物件的pageX, pageY, screenX, screenY, clientX, and clientY這些屬性的座標都可以用。
vmouseover:處理touch 或 mouseover的正規化的事件
vmousedown:處理touchstart 或 mousedown 的正規化的事件
vmousemove:處理touchmove 或 mousemove 的正規化的事件
vmouseup:處理touchend 或 mouseup 的正規化的事件
vclick:處理touchend 或 滑鼠點擊 的正規化的事件。在基於觸控的裝置上,這個事件是在vmouseup事件之後觸發的。
vmousecancel:處理touch 或 mouse 的mousecancel的正規化的事件
警告:小心使用vclick
小心在觸控設備使用vclick。 Webkit核心的瀏覽器會在touchend事 件觸發後300ms自己產生mousedown, mouseup,和click 3個事件。 這些產生的滑鼠事件的目標會在他們觸發的時候被計算出來,並且 是基於touch事件的位置,並且有些情況下會在不同的設備上甚至 相同設備的不同OS會導致不同的計算結果。這意味著原始的點擊 事件的目標語瀏覽器自己產生的滑鼠事件的目標元素可能不是同一個。
我們建議在觸摸後可能會改變你點擊的點下面內容的事件中,使用 click而不是vclick方法。這樣的事件包括頁面轉場和其他的一些行為例如 收縮/伸展 這樣 的 可能會導致螢幕有變化或內容完全被替換的事件。
取消一個元素預設點擊的行為
應用程式會呼叫一個 vclick 事件來取消某個元素的預設點擊事件。在 以滑鼠為基礎的裝置上,對vclick事件呼叫preventDefault()方法等同 於對真實點擊的時間冒泡階段呼叫 preventDefault() 方法。在基底 在觸控的裝置上就有點複雜了,因為真實的點擊事件會在vclick 事件觸發300毫秒之後觸發。對於觸控設備,對vclick事件呼叫 preventDefault()方法會一些vmouse插件的一些程式碼來試圖捕獲下 一個點擊事件。所以根據上述的警告,要匹配一個觸摸事件和與他 對應的滑鼠事件就比較困難,因為他們的目標是不同的。所以 vmouse插件試圖透過座標來辨識一個相符的點擊事件通常會失敗。
有些情況下兩個事件的目標和座標的辨識都會失敗,這樣就會導致點擊事件被觸發或是元素的預設動作會被執行,或是內容被改變或是替換的情況下,觸發了別的元素的點擊事件。如果這樣的bug在給定的元素上有規律的發生,我們建議對於動作使 用click來驅動觸發。