react echarts圖表監聽窗口變化window.addEventListener(‘resize’)與ResizeObserver()

發生問題場景

系統頁面使用tabs標簽頁,當有多個組件,有使用eCharts圖表的頁面時,其中的一個頁面或其他頁面使用了F11的頁面全屏關閉全屏后圖表收縮起來(注:固定eCharts的width、height 的參數值是無影響,按照固定參數大小展示),如使用百分比:

<div ref={myChartRef} style={{ width: '100%', height: '100%' }} />

會收縮,這時候window.addEventListener(‘resize’)(僅監聽窗口)無法監聽

優缺點

在監聽窗口或元素尺寸變化時,window.addEventListener(‘resize’) 和 ResizeObserver 是兩種常見方法,各有優缺點。以下是詳細對比:

1. window.addEventListener(‘resize’)

優點

  • 廣泛兼容性
  • 所有瀏覽器均支持,包括舊版本(如 IE9+)。
  • 簡單直接
  • 監聽整個窗口的尺寸變化,代碼簡潔,適合全局布局調整。
  • 性能優化空間
  • 可通過防抖(debounce)或節流(throttle)減少回調觸發頻率。

缺點

  • 僅監聽窗口
  • 無法直接監聽特定元素的尺寸變化(如 div、iframe 等)。
  • 觸發頻率
  • 瀏覽器窗口調整時可能連續觸發多次回調,需手動優化(如防抖)。
  • 無法獲取變化前后的尺寸
  • 需自行存儲上一次的尺寸值進行比較。
  • 移動端問題
  • 虛擬鍵盤彈出/收起可能觸發 resize,但實際窗口尺寸未變,需額外處理。
    示例代碼
javascript
window.addEventListener('resize', debounce(() => {console.log('窗口尺寸變化:', window.innerWidth, window.innerHeight);
}, 200));function debounce(fn, delay) {let timer;return () => {clearTimeout(timer);timer = setTimeout(fn, delay);};
}

2. ResizeObserver

優點

  • 監聽任意元素
  • 精確監聽特定 DOM 元素的尺寸變化(包括 width、height、padding、border 等)。
  • 高效觸發
  • 瀏覽器內部優化,僅在尺寸實際變化時觸發回調,避免冗余計算。
  • 提供詳細信息
  • 回調中直接返回元素的 contentRect(內容尺寸)和 borderBoxSize(邊框盒尺寸)。
  • 現代標準
  • 專為動態尺寸監聽設計,是W3C 推薦方案。

缺點

  • 兼容性限制
  • 不支持 IE 和舊版 Edge(需 Polyfill 或降級處理)。
  • 初始尺寸不觸發
  • 僅在尺寸變化時觸發,若需初始尺寸需額外調用一次。
  • 循環觀察風險
  • 若回調中修改元素尺寸,可能導致無限循環(需謹慎處理)。
    示例代碼

const element = document.getElementById('target');
const observer = new ResizeObserver((entries) => {for (let entry of entries) {console.log('元素尺寸變化:', entry.contentRect);}
});observer.observe(element); // 開始觀察
// observer.unobserve(element); // 停止觀察

對比總結

在這里插入圖片描述

// 優先使用 ResizeObserver,不支持時回退到 resize + 防抖
if ('ResizeObserver' in window) {const observer = new ResizeObserver(/* ... */);observer.observe(element);
} else {// 使用 resize 事件 + 防抖(需通過其他方式獲取元素尺寸)
}

根據項目需求和瀏覽器支持情況靈活選擇即可。

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

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

相關文章

Leaflet賦能:WebGIS視角下的省域區縣天氣可視化實戰攻略

目錄 前言 一、空間數據基礎 1、省域空間檢索 2、區縣天氣信息檢索 二、天氣數據簡介 1、省域天氣數據獲取 2、區縣名稱不一致 三、SpringBoot后臺實現 1、Java后臺天氣數據查詢 2、控制層實現 四、WebGIS前端實現 1、氣溫顏色及圖例初始化 2、氣溫數據展示實現 五…

《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》論文精讀筆記

前言 論文鏈接&#xff1a;[2401.10935] SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents SeeClick是一種只依賴截圖就能執行自動化任務的方法。 在這篇論文中&#xff0c;還提出了ScreenSpot數據集&#xff0c;涵蓋移動端、桌面和Web環境的真實benchma…

校園綜合數據分析可視化大屏 -Vue純前端靜態頁面項目

最近一直在學習用vue來制作 一些 大屏報表的網站&#xff0c;今天就來分享一個我最近做的一個 關于校園綜合數據分析可視化大屏的網站。 使用的技術是vue2 element-uiVue2&#xff1a;Element-UI&#xff1a;ECharts&#xff1a;Node版本 16.20 安裝依賴&#xff1a;n…

【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9線刷燒錄包 解決用一段時間就提示升級的問題

烽火hg680-gy_烽火hg680-gc安卓9線刷燒錄包 解決提示升級的問題本固件可用于那些adb打不開或無法用U盤成功刷機的盒子&#xff1b;本固件需要準備一個TTL線哦&#xff1b;CH340型號的 可以網上自購&#xff1b;TTL鏈接點 參考下圖&#xff1a;其他也沒有特別需要說明了的&#…

大模型應用發展與Agent前沿技術趨勢(中)

大模型與Agent結合的深度技術架構 分層式Agent架構設計 隨著大模型規模的不斷增長&#xff0c;傳統的Agent實現方式已難以滿足高性能、高可擴展性的需求。現代大模型Agent系統通常采用分層式架構設計&#xff0c;將復雜的決策過程分解為多個功能模塊&#xff0c;每個模塊負責特…

Python可視化工具-Bokeh:動態顯示數據

目錄 概述 1 認識Bokeh 1.1 Bokeh介紹 1.2 安裝Bokeh 1.3 范例介紹 2 Bokeh的應用 2.1 Bokeh應用的框架結構 2.2 實時性數據核心原理 3 具體案例 3.1 代碼實現 3.2 部署和運行 概述 Bokeh是一個用于創建交互式可視化的Python庫&#xff0c;特別適合在Web瀏覽器中展示…

Elasticsearch「kNN Retriever」把向量檢索裝進一條 \_search 管線

1. kNN retriever 是什么&#xff1f; kNN retriever 是 Retriever 框架中的首階段召回器&#xff0c;負責對一個向量字段做近鄰搜索&#xff0c;返回 Top-K 文檔。相比早期的 knn 頂級語法&#xff0c;Retriever 讓我們能在一個請求里組合多種策略&#xff08;如 RRF/Rescorer…

第四天~在CANFD或CAN2.0的ARXML文件中實現Multiplexor多路復用信號實戰

【ARXML專題】-解鎖CAN信號超能力:Multiplexor多路復用技術深度解析 "當你的CAN幀需要傳輸100種信號卻只有64字節時,就像試圖用行李箱裝下一整個衣櫥——Multiplexor就是你的真空壓縮袋" 信號擁堵時代的救世主 現代豪華汽車中,單個ECU可能需處理500+信號,而傳統…

JavaScript 基礎入門:從零開始學 JS

一、JavaScript 簡介JavaScript&#xff08;簡稱 JS&#xff09;是一種高級的、解釋型的編程語言&#xff0c;由 Netscape 公司的 Brendan Eich 在 1995 年開發&#xff0c;最初命名為 LiveScript&#xff0c;后因與 Java 的合作關系而改名為 JavaScript。作為 Web 開發的三大核…

pytest中使用loguru的問題及解決

引語 上一篇文章,我們向大家推薦了python語言的一個第三方日志庫loguru,使用非常簡單且功能完備。 但對于我們做自動化測試,經常使用 pytest 框架的小伙伴來說,卻有點小問題。就是 Pytest 內建的日志捕獲機制是在標準庫 logging 的基礎上進行優化過的。 這樣我們在使用 p…

Qt異步編程:QFuture與QPromise深度解析

在現代GUI應用中&#xff0c;異步操作是保證界面流暢性的關鍵。本文將深入探討Qt框架中強大的異步工具——QFuture和QPromise&#xff0c;揭示它們如何簡化多線程編程并提升應用性能。 為什么需要QFuture/QPromise&#xff1f; 在Qt開發中&#xff0c;我們經常面臨這樣的挑戰&a…

基于Python的電影評論數據分析系統 Python+Django+Vue.js

本文項目編號 25008 &#xff0c;文末自助獲取源碼 \color{red}{25008&#xff0c;文末自助獲取源碼} 25008&#xff0c;文末自助獲取源碼 目錄 一、系統介紹1.1 用戶功能1.2 管理員功能 二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀 六、…

數據結構:在二叉搜索樹中插入元素(Insert in a BST)

目錄 插入的本質是什么&#xff1f; 如何尋找“合法”的位置&#xff1f;—— 模擬查找過程 遞歸插入&#xff08;Recursive Insert&#xff09;—— 優雅的實現 代碼逐步完善 總結 上一節我們從第一性原理搞清楚了二叉搜索樹&#xff08;BST&#xff09;是什么&#xff0…

【論文閱讀】美 MBSE 方法發展分析及啟示(2024)

文章目錄 論文摘要 論文框架 1. MBSE 方法概述 2. 美國防部的 MBSE 方法政策要求 在這里插入圖片描述 3. 美軍兵種的 MBSE 方法政策要求 4. 啟示 5.總結 參考文獻 論文摘要 本文梳理了美國防部基于模型的系統工程(MBSE)方法的發展歷程,并剖析 其技術原理;跟蹤《數字工程戰略…

人工智能訓練師復習題目實操題1.1.1 - 1.1.5

列出所有的python 庫和 apiimport pandas as pd import numpy as np就這兩個庫pandas 庫 - apinumpy 庫 - apimatplotlib.pyplot - apipd.read_csv()np.where(condition,x,y)fillna(methodffill,inplaceTrue)methodbfill,pd.read_excel()np返回結果 series 對象 data[A列].valu…

旅游管理實訓室:旅游教育實踐育人的關鍵支撐

在中等職業教育旅游服務與管理專業教學中&#xff0c;旅游管理實訓室并非簡單的教學場所&#xff0c;而是落實專業教學標準、實現 “理實一體化” 育人的核心陣地。它通過模擬真實職業場景、配置專業實訓設備、設計實踐教學活動&#xff0c;將抽象的專業知識轉化為具體的操作技…

http工作流程

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是互聯網中客戶端與服務器之間傳輸超文本&#xff08;如HTML、圖片、JSON等&#xff09;的核心協議&#xff0c;基于請求-響應模型和TCP/IP協議族工作。其完整工作流程可拆解為以下9個核心步…

正則表達式實用面試題與代碼解析專欄

正則表達式是前端表單驗證、字符串匹配的核心工具,簡潔高效的正則能大幅提升代碼性能。本專欄整理了7道高頻面試題,包含核心正則表達式、代碼實現及關鍵知識點解析,幫你快速掌握正則實用技巧。 一、正則基礎:核心概念與語法 在學習面試題前,先明確幾個高頻基礎語法,這是…

【數據可視化-89】基孔肯雅熱病例數據分析與可視化:Python + pyecharts洞察疫情動態

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

云智智慧停充一體云-allnew全新體驗-路內停車源碼+路外停車源碼+充電樁源碼解決方案

采用Java主流的微服務技術棧&#xff0c;基于 Spring Cloud Alibaba 的微服務解決方案進行封裝的快速開發平臺&#xff0c;包含多種常用開箱即用功能的模塊&#xff0c;通用技術組件與服務、微服務治理&#xff0c;具備RBAC功能、網關統一鑒權、Xss防跨站攻擊、自動生成前后端代…