我记录的小站

天道酬勤
学习就会有收获

JS 监听元素dom变化

我们在开发中;会遇到一些需求;需要监听元素变化;比如元素属性变化;元素大小变化;今天我们就来聊聊俩种常用实现监听的方案

一、ResizeObserver

ResizeObserver 是来监听元素的大小位置发生变化,也可以说是回流(重排)时的变化

<div style="width: 100vw; height: 100vh; background-color: deepskyblue" id="bg">

然后&#xff0c;我们创建监听器&#xff0c;进行监听

// 观察元素变化let el = document.getElementById('bg')// 创建监听器let ob = new ResizeObserver(entries => {for (let entry of entries) {// 监听到的元素
console.log(entry)}})// 监听尺寸变化ob.observe(el)

随之&#xff0c;拖动浏览器窗口&#xff0c;控制台会打印&#xff0c;我们可以看到打印的日志&#xff0c;包含元素的大小信息
在这里插入图片描述
在使用完毕时&#xff0c;可以进行监听结束

ob.unobserve(el)

二、MutationObserver

MutationObserver 是用来监听DOM树的修改&#xff0c;MutationObserver可以监听的属性(配置)

属性名详情默认值
attributes设为 true 以观察受监视元素的属性值变更false
attributeFilter要监视的特定属性名称的数组。如果未包含此属性&#xff0c;则对所有属性的更改都会触发变动通知
characterData设为 true 以监视指定目标节点或子节点树中节点所包含的字符数据的变化
childList设为 true 以监视目标节点&#xff08;如果 subtree 为 true&#xff0c;则包含子孙节点&#xff09;添加或删除新的子节点false
subtree其他值也会作用于此子树下的所有节点&#xff0c;而不仅仅只作用于目标节点false

实现过程&#xff1a;

// 创建监听器let ob = new MutationObserver(entries => {
console.log(entries)})// 监听元素变化ob.observe(el, { attributes: true, subtree: true })// 修改背景颜色el.style.backgroundColor = 'red'

我们可以看到控制台&#xff0c;打印日志&#xff0c;触发更新&#xff1a;
在这里插入图片描述
取消监听&#xff1a;

ob.disconnect()

免责申明:本站部分资源来源于网络,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏