現在的位置: 首頁 > web前端 > 正文

捕獲Mac觸摸板雙指事件

2020年07月21日 web前端 ⁄ 共 996字 ⁄ 字型大小 評論關閉

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


  捕獲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下載


  總結


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


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


  總之,雙指給大家簡單的介紹了一些,希望大家多看看。

抱歉!評論已關閉.