javascript - 如何在JS中检测div元素宽度何时发生变化(而不是窗口大小调整)?

标签 javascript html css ecmascript-6

我有一个场景,如果 div 元素宽度发生变化,我需要执行一些功能。那么有没有办法检测元素宽度变化(而不是窗口大小调整)。

例如, 我有一个宽度为 300px 的 DIV 元素,渲染页面时我的窗口为 800px。当我触发一个函数时,我将 div 元素宽度更改为 400px,因此对于默认宽度更改,我需要执行一些操作,那么有没有什么方法可以在纯 JavaScript 中检测元素大小更改?

最佳答案

完美的解决方案是 ResizeObserver ,因为它比轮询更有效,并且还可以检测由于动态 CSS 单元、过渡、动画等引起的变化。

截至 2022 年,it's already supported in all mainstream browsers .

const elem = document.querySelector('#sizeobserver')

new ResizeObserver(console.log).observe(elem)
#sizeobserver {
   resize: both;
   overflow: hidden;
   border: 1px solid black;
}
<div id="sizeobserver">Resize me!</div>

要忽略高度变化,您可以检查 contentRectwidth 属性。现在仅记录宽度的更改:

const elem = document.querySelector('#sizeobserver')
{ // <--Just to encapsulate prevWidth
  let prevWidth
  new ResizeObserver(changes => {
    for(const change of changes){
      if(change.contentRect.width === prevWidth) return
      prevWidth = change.contentRect.width

      //Code here:
      console.log(change)
    }
  }).observe(elem)
}
#sizeobserver {
   resize: both;
   overflow: hidden;
   border: 1px solid black;
}
<div id="sizeobserver">Resize me!</div>

关于javascript - 如何在JS中检测div元素宽度何时发生变化(而不是窗口大小调整)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60436453/

相关文章:

CSS:限制嵌套 <ul> 上的缩进

jquery - AngularJS - 如何获取文档中元素的顶部和左侧位置的偏移量

javascript - angularjs 中 ng-repeat 和 collection-repeat 的区别?

javascript - 如何遍历 HTML 节点以查找匹配项并从节点获取下一个 innerHTML

CSS/HTML - 如何让文本位于 div 中的图像后面

python - 抓取并存储数据以供 html 显示

html - <div> 旁边的 <img> 的 CSS,带有文本和最小宽度

javascript - 图像和 Canvas 旋转

javascript - 从 JavaScript 控制 Flash 影片

javascript - React - 函数作为 React 子项无效