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

来源:https://www.cnblogs.com/liveoutfun/archive/2018/07/27/9379707.html
-Advertisement-
Play Games

相信如果用谷歌瀏覽器做移動端頁面的時候 用touch事件的時候應該遇到過這個東東吧 documet.addEventListener("touchstart",function(){ console.log(123); }); [Violation] Added non-passive event ...


相信如果用谷歌瀏覽器做移動端頁面的時候  

用touch事件的時候應該遇到過這個東東吧

 

 

documet.addEventListener("touchstart",function(){

 

  console.log(123);

 

});

 

[Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.

翻譯過來就是

違反:沒有添加被動事件監聽器來阻止'touchstart'事件,請考慮添加事件管理者'passive',以使頁面更加流暢。

出現如上提示這可能是由於console的過濾器選擇了Verbose

於是你檢查了代碼  發現並沒有問題  那麼這到底是啥呢

強迫症的我 上網百度了 一下

於是就有所瞭解

 

以前的監聽器都是這樣的

element.addEventListener("touchstart",fn,true|false); 

true  是事件捕獲階段執行

false  是事件冒泡階段執行

這裡不細說

 

沒有第三個參數的時候預設為false 

第三個參數還可以是對象

element.addEventListener("touchstart",fn,

{

capture: Boolean, passive: Boolean, once: Boolean}

}); 

 

第一個參數的意思  true|false  事件捕獲階段冒泡階段

第二個參數  true|flase  不能調用 | 可以調用preventDefault()

第三個參數 once  true|false 只能執行一次fn  | 不限制

 

 

 

那問題來了  為什麼要使用對象  並且要用passive呢  是因為事件裡面的fn執行時需要時間滴

你想呀  執行代碼的時候 比如  mousewheel 的時候  滑鼠滾輪讓滾動條動 可是你調用

preventDefault() 取消了事件的預設行為  那你說  它到底該動還是不動,瀏覽器一臉懵逼

它只有在fn裡面的代碼執行完之後才會知道到底要不要取消預設行為 這樣等待的時間不就

白白浪費掉了嗎 是性能低下  在執行fn之前就告訴 它  是否取消預設行為

這不就你知我長短  我知你深淺了嗎

 

由於這個只有谷歌有  所以相容處理  不認識的大神寫的

 

 

   try{

 var passiveSupported=false;

 var opts=Object.defineProperty({},"passive",{

      

   get:function(){

      

  passiveSupported=true;

 

}

 

});

   document.addEventListener("自己決定",null,opts);

}

 

catch(e){

 

}

 

 document.addEventListener("touchstart",fn,passiveSupported?{"passive":true}:false);

 

這麼看不得勁

挨張圖片

 

 

 

 

 有的人可能不知道 Object.defineProperty()

我就說在這需要用知道的

就是當訪問{} 的 passive 屬性的時候 執行get方法

{}  不就是new Object() 的語法糖嗎

 

 console.log(options) 就是;

 

 所以你明白了吧  

當觸發這個的時候  就是訪問options的passive 屬性  然後passiveSupported=true

 “test”  你隨意設置    

 

嗯  差不多了

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 雲之聲離線Jar包和so文件下載地址 下載地址 Android SoundPool語音播放類 ...
  • iOS學習——核心動畫 1、什麼是核心動畫 Core Animation(核心動畫)是一組功能強大、效果華麗的動畫API,無論在iOS系統或者在你開發的App中,都有大量應用。核心動畫所在的位置如下圖所示,可以看到,核心動畫位於UIKit的下一層,相比UIView動畫,它可以實現更複雜的動畫效果。 ...
  • public final class BitmapUtils { public static final String TAG = "BitmapUtil"; private static int sShotScreenWidth = 480; private static int sShotScr... ...
  • 理論上來說,全部 position 的取值有8個 包括:position:static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed ...
  • 一.問題產生的原因 當我們為div標簽聲明瞭寬度,但是仍然會出現文本越界的情況,不知道大家有沒有發現,只有文本內容為單詞或者純數字 的時候才會出現這種情況為此我特意測試了兩種情況,結果如下: ①當文本內容為純數字或者字母: ②當文本內容為漢字: 所以我們可以得出結論:瀏覽器在解析我們頁面的時候,給這 ...
  • 先介紹一下要解決的問題:react中一個組件A和一個組件B,其中B是被connect(connect是redux中的方法)包裝過的組件,包裝成BContainer,A和BContainer的關係是兄弟關係,在同一個父元素下渲染。現在我們要在點擊A的時候調用B中的方法 解決思路:主要是用到ref獲取B ...
  • hash 要點: 1、不會向後臺發請求;#是用來指導瀏覽器動作的,對伺服器端完全無用。 2、用來跳轉到頁面的指定位置: 為網頁位置指定標識符,有兩個方法。一是使用錨點,比如<a name="print"></a>,二是使用id屬性,比如<div id="print" >。 3、hash改變,會產生一 ...
  • 1,javascript的特點以及和java的區別 javascript是基於對象和事件驅動的語言,應用與客戶端。 javascript是基於對象和事件驅動的語言,應用與客戶端。 js的特點 js的特點 交互性:信息的動態交互 交互性:信息的動態交互 安全性:不能訪問本地磁碟文件 安全性:不能訪問本 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...