使用fastClick.js所產生的一些問題


開發h5活動頁時想到移動端會有300ms的延遲,於是便打算用fastClick.js解決。

頁面引入fastClick.js后,滑動H5頁面的時候發現谷歌瀏覽器會報錯,如下:

Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/...

查詢了之后發現這是因為Chrome及其內核瀏覽器更新了一項新特性,原先只會報黃色等級的錯誤,現在升到紅色了。那么如何解決呢?

一般現在有兩種方案:

  1. 最簡單的是加上*{ touch-action: none; } 不進行任何touch相關默認行為.
  2. 手動清除默認行為
document.addEventListener('touchmove', function (event) {
    event.preventDefault();
}, {
    passive: false
});

看似第一種簡單方便,可是用了之后突然發現頁面不能滑動了,在瀏覽器中鼠標還是能正常滾動,但改成觸摸模式后就不行了。在手機上也不能滑動。關於touch-action的屬性值,具體查文檔就行了。auto是默認值,表示手勢操作什么的完全有瀏覽器自己決定。manipulation表示瀏覽器只允許進行滾動和持續縮放操作,類似雙擊縮放這種非標准操作就不可以。想當初,click事件在移動端有個300ms延時,就是因為避免和手機雙擊行為發生沖突。然而,當我們設置了touch-action:manipulation干掉了雙擊行為,則顯然,300ms延時就不復存在,因此,html {touch-action: manipulation;}聲明可以用來避免瀏覽器300ms延時問題。想到這,突然想到還用使用fastClick嗎,直接用這個css屬性不就行了。還引那么一堆東西干嘛。查了touch-action的兼容性,發現在移動端大多數還是兼容的。於是移動端以后就可以大膽的使用click事件了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM