开发过程中总会遇到dom节点尺寸变化,去做一些相应的逻辑,第一想到的应该是用$(window).resize()去做,但是这个是监听浏览器窗口的所以这个时候要用 ResizeObserver

ResizeObserver可以帮助我们监听一个DOM节点的变化

1.节点的显示和隐藏

2.节点的size变化

兼容性 

js实时监听dom尺寸变化-LMLPHP

ResizeObserver API使用了观察者模式,也就是我们常说的发布-订阅模式

  var resizeObserver = new ResizeObserver(function( entries ) {
     // entries 是一个数组 里面有5个属性能用到的只有两个contentRect, target
    // contentRect 是dom的几何信息
    // target 和点击事件里面的target一样的 dom对象
    entries.forEach((item, index) =>{
      console.log(item.contentRect)
    })
  })    

完成代码

html

  <div class="box"></div>
  <button class="plus-width">加宽</button>
  <button class="plus-height">加高</button>

css

   .box{
      width: 100px;
      height: 100px;
      background-color: red;
    }

js

// 加宽
$('.plus-width').on('click', function(){
var width = $('.box').width()
setAttr('width',width)
})
// 加高 $(
'.plus-height').on('click', function(){

  var height = $('.box').height()
  setAttr('height',height)
})
 // 设置
function setAttr(attr, value) {
  value+=10
$('.box').css({[attr]: value+'px'})
}
var resizeObserver = new ResizeObserver(function( entries ) { // console.log(entries) entries.forEach((item, index) =>{ console.log(item.contentRect) }) })
// 监听dom resizeObserver.observe(document.querySelector(
'.box'))


window.setTimeout(() => {
   resizeObserver.disconnect()    // 此时就不会再监听document.QuerySelector('.box')节点了
}, 4000)
04-13 10:36