开发过程中总会遇到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. [SPDK/NVMe存储技术分析]002 - SPDK官方介绍

    Introduction to the Storage Performance Development Kit (SPDK) | SPDK概述 By Jonathan S. (Intel), Upda ...

  2. Flutter入门教程(二)开发环境搭建

    学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...

  3. 有序全排列c++实现(递归)

    1 #include <iostream> 2 #include <algorithm> 3 #include <iterator> 4 #include < ...

  4. 文字图片在wps中清晰化方法

    在wps中双击图片出属性,然后再选择文字增强.选择对比增加即可.

  5. SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码

    一.yml文件配置 spring: # 数据库配置 datasource: primary: jdbc-url: jdbc:mysql://localhost:3306/mes-dev?useUnic ...

  6. UML 中有哪些常用的图?

    UML 定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结 构,包括:用例图(use case diagram).类图(class diagram).时序图(sequence diagr ...

  7. Javascript 占位符替换

    String.prototype.format=function(){ if(arguments.length===0){ return String(this); } let reg=/(\{\d\ ...

  8. Go 语言 结构体

    Go 语言 结构体 引言Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型结构体是由一系列具有相同类型或不同类型的数据构成的数据集合结构体表示一项记录,比如保存图书 ...

  9. ROS机器人操作系统相关书籍、资料和学习路径

    作者:Top Liu链接:https://zhuanlan.zhihu.com/p/30391098来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文是易科机器人实验 ...

  10. python学习笔记(七)——内置函数

    builtins.py模块,是python的内建模块,在运行时会自动导入该模块.在该模块中定义了很多我们常用的内置函数,比如print,input 等. 在 builtins.py 模块中给出如下注释 ...