[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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...