问题解决:JS实时监听元素样式变化(比如宽、高)= 亲测有效

本文介绍如何使用MutationObserver API来监听DOM元素样式的实时变化,包括配置监听选项、捕获属性变化及尺寸变更等,适用于网页布局动态调整的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实时监听元素样式的变化

概述

参考文章: https://www.cnblogs.com/ygunoil/p/14299195.html

官方文档: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe

注意: 必须配置、必须配置、必须配置:subtree=true以及characterData=true



MutationObserver监听选项

选项作用
childListtrue/false设置为true表示监听指定元素的子元素的变动
attributestrue/false设置为true表示监听指定元素的属性的变动
characterDatatrue/false设置为true表示监听指定元素的data变动
subtreetrue/false设置为true表示不紧监听目标元素也同时监听其子元素变动,不能单独设置此选项,必须至少包含前三个选项中的一个
attributeOldValuetrue/false在attributes属性已经设为true的前提下,设置为true则会记录节点旧的属性值到MutationRecord的recordOldValue属性
characterDataOldValuetrue/false在characterData属性已经设为true的前提下,设置为true则会记录节点旧的数据到MutationRecord的recordOldValue属性
attributeFilter监听的属性数组,比如[‘style’…]配置监听数组内的属性变化,数组外的属性变化会被忽略

代码


代码


data() {
		return {
			//侧边栏是否不展开
			isCollapse: true,
			menuDatas:menuDatas,
			webSiteFooterInfoVO: {

			},

			recordOldValue: {

			},
			observer: null
		}
},
            
            
methods: {
	changeStyle: function () {
		let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
		let element = $("html").get(0)
		this.observer = new MutationObserver((mutationList) => {
			let width = str2Num(getComputedStyle(element).getPropertyValue('width'));
			let height = str2Num(getComputedStyle(element).getPropertyValue('height'));
			
			if (width === this.recordOldValue.width && height === this.recordOldValue.height) {
				return
			}
			log("html元素尺寸发生变化:", this.recordOldValue, {width,height})
			this.recordOldValue = {
				width,
				height
			}
			this.$nextTick(() => {
				if(window.innerHeight > $("html").height()) {
					$(".footerBox").addClass("outerWindowHeight");
				}else {
					$(".footerBox").removeClass("outerWindowHeight");
				}
			})

		})
		this.observer.observe(element, { attributes: true, subtree:true,characterData:true, attributeFilter: ['style'], attributeOldValue: true })
	}
},   


mounted: async function () {
	//监听html元素的变化
	this.changeStyle()
}

  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9pBqbIl-1665120487052)(en-resource://database/62359:0)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值