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

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

1.节点的显示和隐藏

2.节点的size变化

兼容性

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)

js实时监听dom尺寸变化的更多相关文章

  1. js 实时监听input中值变化

    注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...

  2. js动态监听dom变化

    原生js 动态监听dom变化,根据不同的类型绑定不同的处理逻辑 // Firefox和Chrome早期版本中带有前缀   var MutationObserver = window.MutationO ...

  3. JS实时监听浏览器宽度的变化

    boot:function(){ //加载页面时执行一次 changeMargin(); //监听浏览器宽度的改变 window.onresize = function(){ changeMargin ...

  4. js实时监听input中值得变化

    <!DOCTYPE html> <html> <head> <title>zepto</title> <meta name=" ...

  5. js 实时监听textarea输入

    html: <textarea class="area" name="" id="text1" maxlength="100 ...

  6. js实时监听input中值的变化

    $(function(){ $('#inputid').bind('input propertychange', function() { // input 中的值 var params = $(th ...

  7. 利用原生JS实时监听input框输入值

    传送门https://www.cnblogs.com/lantinggumo/p/7636715.html 传送门https://www.cnblogs.com/nailc/p/8572226.htm ...

  8. js 实时监听滚动条状态 判断滚动条位置

      var scrollFunc = function (e) {    e = e || window.event; var t = document.documentElement.scrollT ...

  9. 通过jQuery实时监听表格行数变化

    [本文出自天外归云的博客园] 使用bootstrap table组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数.想要监听表格变化,如何做呢? 使用场景:有一个表格里放着许多测试 ...

随机推荐

  1. Arcgis Server发布的带有透明度的地图服务,调用时不显示透明度问题

    问题: 在发布道路地图时候设置地图透明度为50% 使用arcgis API for js 中 ArcGISDynamicMapServiceLayer 调用该地图时,发现透明效果不实现 如下图: 解决 ...

  2. 内置方法 __str__ __repr__

    内置方法(双下方法,魔术方法) 在不需要程序员定义,本身就存在的类中的方法就是内置方法 内置方法:  __名字__ __init__   不需要我们主动调用,而是在实例化的时候内部自动调用的,存在一种 ...

  3. Windows安全加固手册

    1      身份鉴别 1.1         密码安全策略 要求:操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 目的:设置有效的密码策略,防止攻击者 ...

  4. activemq 使用经验

    activemq 使用经验   ActiveMQ 是apache的一个开源JMS服务器,不仅具备标准JMS的功能,还有很多额外的功能.公司里引入ActiveMQ后,ActiveMQ成里我们公司业 务系 ...

  5. S7-1200学习记录

    型号:CPU 1212C DC/DC/DC 硬件包括CPU模块.信号模块(输入输出).通信模块.屏幕面板 1.通信模块 S7-1200最多可以添加3块通信模块,可以使用点对点通信模块.PROFIBUS ...

  6. 有没有想过String为什么设计为不可变对象

    1.声明为final类的目的: 主要目的就是保证String是不可变(immutable).不可变就是第二次给一个String 变量赋值的时候,不是在原内存地址上修改数据,而是重新指向一个新对象,新地 ...

  7. 机械学习笔记1 -> Solidworks三维产品设计与建模1 | 建模基础入门

    学习之余,课余了解一点点,作为爱好,妄想以后能够设计机甲出来. 学习来源是Solidworks三维产品设计与建模 00 工作界面介绍 00-1 概览 有时菜单栏和工具栏会重叠在一起,只有点击左侧三角才 ...

  8. centos7 环境安装rabbitmq 集群

    继上一篇https://www.cnblogs.com/drafire/p/10062891.html ,这篇博客继续介绍centos 7下安装rabbitmq的集群. 今天在公司搞了一天的rabbi ...

  9. Linux 安装jdk1.8

    Linux安装jdk1.8 总结一句话就是:下载jdk1.8 ==> 解压 ==> 配置环境变量. 一.  jdk的下载,这里有两种方法: 1.去Oracle官网下载. 2.jdk1.8的 ...

  10. CAN总线系列讲座第六讲——SJA1000的滤波器设置

    CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除. 在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控 ...