在H5頁面移動端項目當(dāng)中赫蛇,click事件在瀏覽器中會有300ms的延遲,這個也是移動端開發(fā)中常見的問題之一,今天就這個問題說一說解決方法
解決click點擊事件300ms延遲—fastClick
fastClick的思路就是利用touch來模擬tap(觸碰)霎挟,如果認(rèn)為是一次有效的tap,則在touchend時立即模擬一個click事件麻掸,分發(fā)到事件源(相當(dāng)于主動觸發(fā)一次click)酥夭,同時阻止掉瀏覽器300ms后產(chǎn)生的click,自然也不存在點擊穿透的問題脊奋。
在vue項目中熬北,可以通過引入fastclick
第三方依賴包來解決。
1诚隙、安裝fastclick依賴
npm install fastclick ---save
2讶隐、在main.js中引入并使用
import fastClick from 'fastclick'
fastClick.attach(document.body)
遇到的issue
1、在ios系統(tǒng)中久又,點擊input框或者textarea框無法喚起輸入法
在使用過程中巫延,你可能會發(fā)現(xiàn),在ios系統(tǒng)中地消,點擊input框或者textarea框無法喚起輸入法炉峰,往往點擊多次才能喚起輸入法,極大的影響了用戶體驗脉执,這是ios升級11.3以后fastclick的問題疼阔,對此,可采用以下方法解決:
在fastclick.js中找到FastClick.prototype.focus = function(targetElement) {...}
半夷,大概在325行左中婆廊,添加如下代碼即可
// ios系統(tǒng)下,觸摸input框以及textarea框無法喚起輸入法
targetElement.focus();
此時fastclick版本是1.0.6
2玻熙、有些元素不需要立刻觸發(fā)點擊
例如:在寫移動端項目的時候否彩,我引用了vant組件中的swipe輪播圖,在項目中全局引入了fastclick后嗦随,我發(fā)現(xiàn)列荔,swipe滑動失效了敬尺。或者你還會碰到一些其他情況贴浙,但又不想舍棄掉組件砂吞,這時可以參考一下解決方法:
needsclick
對于頁面上不需要使用fastclick來立刻觸發(fā)點擊事件的元素,在元素標(biāo)簽的class上添加needsclick
<!--舉例 -->
<buttton class="needsclick" @click="aaa"></button>