js實現Mac觸摸板雙指事件(上/下/左/右/放大/縮小)

來源:互聯網
上載者:User

標籤:思路   相加   操作   touch   時間   問題:   觸摸   ges   放大   

前言

這幾天在修複一個web問題時,需要捕獲Mac觸摸板雙指事件(上、下、左、右、放大、縮小),但發現並沒有現成的輪子,還是要自己造。

例如:jquery.mousewheel.js(添加跨瀏覽器的滑鼠滾輪支援), 給得太簡單,沒有處理Mac雙指行為,所以不能用。

目標

擷取Mac觸摸板雙指行為,具體有兩個,一個是即時拖動路線,二是手勢(上、下、左、右、放大、縮小)。

痛點

雙指行為只會觸發mousewheel事件,其他什麼的touch,mouse都不會觸發,只能從這個下手。

雙指特性

1.在快速滑動過程中,deltaX、deltaY值的最初值的正負是與滑動方向不同的。

2.在緩慢滑動過程中,deltaX、deltaY值的範圍是非常小的,一般在於[-3, 3]。

3.在1s內,mousewheel事件大概觸發100次左右。

4.滑動過程中,數值會有抖動問題。

實現拖動路線思路(Path)

針對快速滑動

1.deltaX、deltaY值的最初值的正負是與滑動方向不同的這部分資料要捨棄。(因為不是真正方向)

2.每次觸發的deltaX、deltaY值兩兩相減,結果值如果與方向不同,則捨棄。3.剩下的差值就是方向挪動距離。

4.兩個方向的所有差值相加,共兩組,哪組值大取哪組,正負決定方向。

針對緩慢滑動

1.由於deltaX、deltaY值的範圍是非常小,所以都保留,但值與方向不同的,也捨棄。

2.兩個方向的所有差值相加,共兩組,哪組值大取哪組,正負決定方向。

實現手勢思路(Gesture)

在上面的基礎上,記錄一段時間內deltaX、deltaY和兩兩差值:

deltaX、deltaY用來統計放大、縮小手勢。

兩兩差值用來統計上、下、左、右手勢。

所以,手勢是一段時間的手勢,而不是某個時刻的。

實現代碼

具體代碼就不貼出來,可直接在我Github下載:https://github.com/codingforme/jquery-mac-mousewheel

總結

路線問題:mousewheel給予的deltaX、deltaY值跟操作效果有挺大不同,快速滑動效果特別不準確。

手勢問題:由於雙指特性的第三點,手勢實現無法精確,即便是把時間段變得很短,但因為資料量問題(無法用微積分的思路),會變得更不精確;把時間段變長,反應時間長度又會變長;

具體效果可以下代碼來看看,效果不大滿意,但可以下載看看,有更好的方案,請告訴我,跪謝。 

js實現Mac觸摸板雙指事件(上/下/左/右/放大/縮小)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.