ResizeObserver的錯誤

為什么會存在ResizeObserver錯誤

ResizeObserver loop completed with undelivered notifications.

ResizeObserver用于監聽元素content size和border size的變化。但是元素的變化和監聽可能會導致循環觸發,例如有元素A,監聽元素A尺寸變化后將元素A的寬度加10px,如果沒有特殊處理,那么線程將一直被占用無法進行其他任務,因為:A 寬度加10,監聽到元素A尺寸變化后,A 寬度加10,監聽到元素A尺寸變化后,A 寬度加10…就這么一直下去。

所以瀏覽器引入了策略,觸發ResizeObserver事件后,所有回調會在這一幀繪制到屏幕前執行,在遍歷執行所有回調函數時對于觸發回調的目標元素和其父元素的ResizeObserver的監聽回調會推遲到下一幀執行,同時會在控制臺拋出錯誤ResizeObserver loop completed with undelivered notifications.

也就是說:

  1. A > B 當A寬度增加時,B寬度同步增加同時監聽A元素和B元素的變化。那么當A元素變化時監聽B元素尺寸變化的回調會同步執行,并且A元素變化的監聽函數會推遲到下一幀執行,并且控制臺報錯,因為有未執行的回調。

  2. Contaienr > A > B 當A寬度增加時,B寬度同步增加同時監聽A元素和B元素的變化,Container元素的寬度同樣會增加。那么當A元素變化時監聽B元素尺寸變化的回調會同步執行,并且A元素和Container元素變化的監聽函數會推遲到下一幀執行并且控制臺報錯,因為有未執行的回調。

怎么避免

  1. 避免循環執行:在回調中判斷達到目標值之后就不修改元素尺寸,導致回調意外觸發。

  2. 延遲尺寸修改到下一幀:將執行順序改為,幀1,A元素尺寸變化 -> 幀2,執行A元素尺寸變化的回調 -> 幀3,元素尺寸變化 -> … 這樣一直下去,就不會觸發控制臺報錯,因為監聽和觸發是分幀進行的。

const resizeObserver = new ResizeObserver((entries) => {requestAnimationFrame(() => {for (const entry of entries) {entry.target.style.width = `${entry.contentBoxSize[0].inlineSize + 10}px`;}});
});

參考

ResizeObserver

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84891.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[k8s]--exec探針詳細解析

在 Kubernetes 中,exec 探針是一種通過 在容器內執行命令 來檢測容器健康狀態的機制。它的核心邏輯是:執行命令后,若命令返回值為 0(表示成功),則認為容器健康;否則認為不健康。 一、exec 探針的…

偶數項收斂半徑

🧠 背景:冪級數與收斂半徑 一個冪級數(power series): ∑ n 0 ∞ a n x n \sum_{n0}^{\infty} a_n x^n n0∑∞?an?xn 其收斂半徑 R R R 表示該級數在哪些 x x x 的取值范圍內收斂。其計算公式: 1 R …

從0開始學習語言模型--Day01--親自構筑語言模型的重要性

在如今這個時代,人工智能儼然已經成了一個大家耳熟能詳的詞匯。隨著技術的發展,它在不斷地降低計算機領域一些工作的門檻,甚至有時候我們能看到一個可能六年前還需要從頭開始學習的職業,現在只需要能掌握一個專屬的小模型就可以擁…

【量化】策略交易之動量策略(Momentum)

【量化】策略交易之動量策略(Momentum) 一、動量策略(Momentum Strategy)原理 👉🏻 核心思想: 強者恒強,弱者恒弱。 動量策略認為,過去一段時間漲得多的資產&#xff0c…

Cesium快速入門到精通系列教程九:Cesium 中高效添加和管理圖標/標記的標準方式??

Cesium中通過 ??Primitive 高效添加 ??點、線、多邊形、圓、橢圓、球、模型?? 等地理要素,以下是各類地理要素的高效添加方式: 一、公告板 1. 創建 BillboardCollection 并添加到場景? const billboards viewer.scene.primitives.add(new Ces…

volka烹飪常用英語

1. 視頻開場與主題介紹 Today, we are going to learn English while cooking. Fire. In this video, I’m going to continue to teach you the 3,000 most common English words that will allow you to understand 95% of spoken English. And we are going to be preparin…

同旺科技 USB TO SPI / I2C適配器(專業版)--EEPROM讀寫——B

所需設備: 1、USB 轉 SPI I2C 適配器;內附鏈接 2、24C64芯片; 適應于同旺科技 USB TO SPI / I2C適配器專業版; 燒寫EEPROM數據、讀取EEPROM數據、拷貝EEPROM數據、復制產品固件,一切將變得如此簡單! 1…

Linux下成功編譯CPU版Caffe的保姆級教程(基于Anaconda Python3.8 包含完整可用Makefile.config文件)

目錄 前言 一、環境準備 1. 系統要求 2. 安裝必要依賴 二、Anaconda環境配置 1. 安裝Anaconda 2. 創建專用Python環境 3. 安裝必要的Python包 三、獲取Caffe源代碼 四、配置編譯選項 1. 修改Makefile.config 2. 修改Makefile 3. 修改CMakeLists.txt(如…

shell三劍客

了解三劍客 三劍客指的是: grep、sed和awk這三個在linux系統中常用的命令行工具 shell三劍客 grep: 主要用于查找和過濾特定文本 sed:是一個流編輯器,可以對文本進行增刪改查 awk:是一個文本處理工具,適合對列進行處…

創客匠人視角:知識IP變現的主流模式與創新路徑

知識IP變現賽道正從“野蠻生長”走向“精細化運營”,如何在流量紅利消退期實現可持續變現?創客匠人基于服務數萬職業教育IP的實踐經驗,總結出一套兼顧效率與長尾價值的變現邏輯,為行業提供了可參考的路徑。 主流變現模式&#x…

【嵌入式人工智能產品開發實戰】(二十三)—— 政安晨:將小智AI代碼中的display與ota部分移除

政安晨的個人主頁:政安晨 歡迎 👍點贊?評論?收藏 希望政安晨的博客能夠對您有所裨益,如有不足之處,歡迎在評論區提出指正! 目錄 本篇目標 第一步 ? 修改說明 🔧 修改后的代碼節選 📌 總…

從sdp開始到webrtc的通信過程

1. SDP 1.1 SDP的關鍵點 SDP(Session Description Protocol)通過分層、分類的屬性字段,結構化描述實時通信會話的 會話基礎、網絡連接、媒體能力、安全策略、傳輸優化 等核心信息,每個模塊承擔特定功能: 1. 會話級別…

PHP、Apache環境中部署sqli-labs

初始化數據庫的時候,連接不上 檢查配置文件里面的數據庫IP、用戶名、密碼是否正確 mysqli_connect函數報錯 注意要下載兼容PHP7的sqli-labs版本 1、下載sqli-labs工程 從預習資料中下載。 文件名:sqli_labs_sqli-for7.zip 2、配置數據庫 把下載好的…

Spring AI Alibaba Graph 實踐

本文中將闡述下 AI 流程編排框架和 Spring AI Alibaba Graph 以及如何使用。 1. Agent 智能體 結合 Google 和 Authropic 對 Agent 的定義:Agent 的定義為:智能體(Agent)是能夠獨立運行,感知和理解現實世界并使用工具…

Server 11 ,?通過腳本在全新 Ubuntu 系統中安裝 Nginx 環境,安裝到指定目錄( 腳本安裝Nginx )

目錄 前言 一、準備工作 1.1 系統要求 1.2 創建目錄 1.3 創建粘貼 1.4 授權腳本 1.5 執行腳本 1.6 安裝完成 二、實際部署 2.1 賦予權限 2.2 粘貼文件 2.3 重啟服務 三、腳本解析 步驟 1: 安裝編譯依賴 步驟 2: 創建安裝目錄 步驟 3: 下載解壓源碼 步驟 4: 配置…

層壓板選擇、信號完整性和其他權衡

關于印刷電路材料,我有很多話要說,我覺得這非常有趣,而且所有候選人都帶有“材料”這個詞。無論出現在頂部的東西都是我最終選擇的。我實際上會描述決策過程,因為我認為這很有趣,但首先要強調將我帶到這里的職業旅程。…

幾種經典排序算法的C++實現

以下是幾種經典排序算法的C實現&#xff0c;包含冒泡排序、選擇排序、插入排序、快速排序和歸并排序&#xff1a; #include <iostream> #include <vector> using namespace std;// 1. 冒泡排序 void bubbleSort(vector<int>& arr) {int n arr.size();f…

[學習] 多項濾波器在信號插值和抽取中的應用:原理、實現與仿真(完整仿真代碼)

多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真 文章目錄 多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真引言 第一部分&#xff1a;原理詳解1.1 信號插值中的原理1.2 信號抽取中的原理1.3 多項濾波器的通用原理 第二部分&#xff1a;實現…

Linux中source和bash的區別

在Linux中&#xff0c;source和bash&#xff08;或sh&#xff09;都是用于執行Shell腳本的命令&#xff0c;但它們在執行方式和作用域上有顯著區別&#xff1a; 1. 執行方式 bash script.sh&#xff08;或sh script.sh&#xff09; 啟動一個新的子Shell進程來執行腳本。腳本中的…

解決文明6 內存相關內容報錯EXCEPTION_ACCESS_VIOLATION

我裝了很多Mod&#xff0c;大約五六十個&#xff0c;經常出現內存讀寫異常的報錯。為了這個問題&#xff0c;我非常痛苦&#xff0c;已經在全球各大論壇查詢了好幾周&#xff0c;終于在下方的steam評論區發現了靠譜的解答討論區。 https://steamcommunity.com/app/289070/dis…