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

导读:本篇文章讲解 问题解决:JS实时监听元素样式变化(比如宽、高)= 亲测有效,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

实时监听元素样式的变化

概述

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

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

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



MutationObserver监听选项

选项 作用
childList true/false 设置为true表示监听指定元素的子元素的变动
attributes true/false 设置为true表示监听指定元素的属性的变动
characterData true/false 设置为true表示监听指定元素的data变动
subtree true/false 设置为true表示不紧监听目标元素也同时监听其子元素变动,不能单独设置此选项,必须至少包含前三个选项中的一个
attributeOldValue true/false 在attributes属性已经设为true的前提下,设置为true则会记录节点旧的属性值到MutationRecord的recordOldValue属性
characterDataOldValue true/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)]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/46334.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!