From dd354002851d363e219fe6328a4cb65d944b0f42 Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:13:45 +0200 Subject: [PATCH 1/3] use ResizeObserver for responsive charts --- src/lib/clear_responsive.js | 6 +++--- src/plot_api/plot_api.js | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib/clear_responsive.js b/src/lib/clear_responsive.js index a2e33f26a1c..dada7f6d69b 100644 --- a/src/lib/clear_responsive.js +++ b/src/lib/clear_responsive.js @@ -6,8 +6,8 @@ * @param {DOM node or object} gd : graph div object */ module.exports = function clearResponsive(gd) { - if(gd._responsiveChartHandler) { - window.removeEventListener('resize', gd._responsiveChartHandler); - delete gd._responsiveChartHandler; + if(gd._responsiveChartObserver) { + gd._responsiveChartObserver.disconnect(); + delete gd._responsiveChartObserver; } }; diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index 0adcd88b12b..67c306e54a6 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -167,14 +167,13 @@ function _doPlot(gd, data, layout, config) { // make the figure responsive if (gd._context.responsive) { - if (!gd._responsiveChartHandler) { - // Keep a reference to the resize handler to purge it down the road - gd._responsiveChartHandler = function () { + if (!gd._responsiveChartObserver) { + // Keep a reference to the resize observer to purge it down the road + gd._responsiveChartObserver = new ResizeObserver(function() { if (!Lib.isHidden(gd)) Plots.resize(gd); }; - // Listen to window resize - window.addEventListener('resize', gd._responsiveChartHandler); + gd._responsiveChartObserver.observe(gd); } } else { Lib.clearResponsive(gd); From 824c3c8d43c1673b155fe20ceace4bd362417d18 Mon Sep 17 00:00:00 2001 From: Lexachoc <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:20:08 +0200 Subject: [PATCH 2/3] fix syntax error --- src/plot_api/plot_api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index 67c306e54a6..02314767035 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -171,7 +171,7 @@ function _doPlot(gd, data, layout, config) { // Keep a reference to the resize observer to purge it down the road gd._responsiveChartObserver = new ResizeObserver(function() { if (!Lib.isHidden(gd)) Plots.resize(gd); - }; + }); gd._responsiveChartObserver.observe(gd); } From fa7f7137d4421a36aade9e0e6d0210dcd473ca31 Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 3 Sep 2026 23:21:26 +0200 Subject: [PATCH 3/3] add draftlog --- draftlogs/8017_change.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/8017_change.md diff --git a/draftlogs/8017_change.md b/draftlogs/8017_change.md new file mode 100644 index 00000000000..e2087918049 --- /dev/null +++ b/draftlogs/8017_change.md @@ -0,0 +1 @@ +Use `ResizeObserver` for responsive chart resizing instead of listening for window resize events [[#8017](https://github.com/plotly/plotly.js/pull/8017)]