關於zepto在chrome中觸發兩次的解決方案

復現條件:chrome 55+ios

 

1.zepto tap的實現及double fire的緣由chrome

在監聽DOM根節點的時候,touchStart後經過XY的座標誤差,與tapTime的計時判斷Tap/LongTap/doubleTap,而兩次觸發正是入口綁定事件的問題。 瀏覽器

同時綁定了touchStart pointerDown,原先這種寫法只是爲了hack 微軟的Edge瀏覽器和兄弟瀏覽器,可是chorme 從55版本時就開始支持pointer。而我瀏覽版本很高,致使了這個問題能夠復現。
函數

Timline中對js監聽圖

能夠發現 回調函數被執行了兩遍
測試

2.zepto tap目前在touch端的的兼容spa

身邊可測試機型有限orm

ios9-10沒問題 事件

安卓 4.4 chrome UC也無此問題zepto

3.解決方案
1.更改源碼 對useragent進行判斷bind eventListener時區別bind
2.節流函數/全局變量Flag
3.tap換成click回調函數

相關文章
相關標籤/搜索