我希望能够响应 HTML 文档中 SVG 元素大小的变化。经过一些研究,我发现 ResizeObserver API 可以监听给定的 HTML 或 SVG 元素的大小变化(stackoverflow,MDN)。不幸的是,我无法使其在 SVG 元素上起作用。
我的示例包含一个 DIV 元素、一个 SVG 元素和一个 ResizeObserver。
const svg = document.querySelector('#svg')
const svgInfo = document.querySelector('#svg-info')
const div = document.querySelector('#div')
const divInfo = document.querySelector('#div-info')
const svgObserver = new ResizeObserver(() => {
svgInfo.textContent = svg.clientWidth
})
svgObserver.observe(svg)
const divObserver = new ResizeObserver(() => {
divInfo.textContent = div.clientWidth
})
divObserver.observe(div)
<svg id="svg" style="background-color: red; width: 100%; height: 50px"></svg>
<div id="svg-info">initial</div>
<div id="div" style="background-color: blue; width: 100%; height: 50px"></div>
<div id="div-info">initial</div>
我希望当调整元素大小时,例如调整窗口大小时,两个ResizeObservers都会触发,这将由两个信息标签的变化可见。 然而,在我的情况下(Mozilla Firefox 84.0),只有DIV元素的信息标签发生了变化。
作为一种解决方法,我可以考虑用DIV包装我的SVG作为代理。尽管如此,我仍然想知道为什么ResizeObserver和SVG的组合不起作用。