vue监听宽高度变化
#从今天起记录我的2023#
当我们切换左侧菜单展示效果的时候,有时一些需要进行缩放计算的右侧内容并不能执行自适应效果,所以为解决类似此问题,我们可以使用以下几种方式进行监听宽高变化,在进行相应的逻辑计算。
1.使用element-resize-detector方式监听宽度变化
安装:npm install element-resize-detector --save
使用://引入element-resize-detector import elementResize from "element-resize-detector"; //在mounted中使用 mounted() { //1、使用element-resize-detector方式监听宽度变化 var erd=elementResize(); let that=this; //监听并执行 erd.listenTo(document.getElementById("mainSize"),function(element){ var width=element.offsetWidth; var height=element.offsetHeight; that.$nextTick(function () { console.log(999999999999); }) })
}
2.Mutation Events中的DOMSubtreeModified
DOMSubtreeModified用于监听元素子项修改(包括删除和新增);document.getElementById("mainSize").addEventListener("DOMSubtreeModified", this.setWidth);
Mutation Events中的问题:IE9不支持Mutation Events;性能问题:Mutation Events是同步执行的:它的每次调用,都需要从事件队列中取出事件并执行,然后事件队列中移除,期间需要移动队列元素;如果事件触发的较为频繁的话,每一次都需要执行上面的这些步骤,那么浏览器会被拖慢;Mutation Events本身是事件,所以捕获是采用的是事件冒泡的形式;如果冒泡捕获期间又触发了其他的Mutation Events的话,很有可能就会导致阻塞Javascript线程,甚至导致浏览器崩溃;
3.使用Mutation Observer
MutationObserver接口提供了监视对DOM树所做的更改的功能。Mutation Observer是在DOM4中定义的,用于替代Mutation Events的新API ; //必须更改style样式才会被监听到 var MutationObserver=window.MutationObserver||window.WebKitMutaionObserver||window.MozMutationObserver var suppored=!!MutationObserver; var article=document.getElementById("mainSize"); var mo =new MutationObserver( (list)=> { console.log("00000"); for (const iterator of list) { console.log(iterator); } console.log("00000"); }) var options={ attributes:true, attributeFilter:["style"], attributeOldValue:true, } mo.observe(article,options);
浏览器兼容:
4.使用ResizeObserver
我们知道window.resize事件能帮我们监听窗口大小的变化。它会监听每个元素的大小变化(只有window对象才有resize事件),而不是具体到某个元素的变化。ResizeObserver接口监视Element内容盒或边框盒或者SVGElement边界尺寸的变化。(节点大小、出现或隐藏) const myObserver=new ResizeObserver(entries=>{ entries.forEach(entry => { console.log(entry.contentRect); console.log(entry.target); }); }) myObserver.observe(document.getElementById("mainSize"))
但是作为一个较新的JavaScript API,他的兼容性需要注意:
5.自定义指令监听某标签宽高变化
directives:{
//5、自定义指令监听某标签宽高变化
resize:{
bind(el,binding){
let width="",height=""
function isResize(){
//获取当前元素的所有的计算样式
const style=document.defaultView.getComputedStyle(el);
if(width!==style.width||height!==style.height){
binding.value()
}
width=style.width
height=style.height
}
el._vueSetInterval=setInterval(isResize,300);
},
unbind(el){
clearInterval(el._vueSetInterval)
}
}
},
@大有學問
中俄2大动作后,布林肯就火速打来电话,中方这次不再客气最近,中国很热闹,澳外长黄英贤来了,俄罗斯统一俄罗斯党主席梅德韦杰夫也来了。比起中澳关系回暖,美国更害怕的是中俄越走越近,而担心来什么就来什么,在美国的眼中,如今中俄合作越来越紧密
陈皮咖啡陈皮山楂新会陈皮借新电商平台火爆出圈每年的新会摘柑季开始后,顺德的翡翠玩家老张必定在12月初来到东甲村。东甲村位于江门新会区旧城区之东,与梅江村天马村茶坑村并称为新会陈皮四大核心产区。老张着迷东甲大红皮的花香,每年亲
中国服装出海记作者丨董静怡编辑丨林曦图源丨摄图网服装一直是跨境电商的热门赛道。根据弗若斯特沙利文数据,中国跨境出口B2C电商服饰及鞋履行业的市场规模由2017年的1609亿元增加至2021年的7
印度外交部已经准备好向中国提供帮助,可以大量出口供应退烧药印度外交部记者会据悉,近期中国疫情防控政策有所调整,引发国际关注。本周二美国国务院发言人普莱斯在回答记者提问时,首次提出了向中国援助疫苗的打算他表示美方已经准备好了向全球各国的人们
美媒预测全球10大风险,称到2023年,中国将难以获得更多外国产品据参考消息网报道,近日美媒发表了一篇文章预测了2023年全球十大风险,值得注意的是,这些风险中几乎都有美国的身影,并且其中有几项涉及到了中国。根据文章内容,这十大风险分别为乌克兰冲
感恩于心与爱同行丨来自力迈学子及家长最有温度的表达漫天的雪花飞舞表达对天空的感恩蒲公英点头微笑那是对风儿的感恩感恩是一种表达方式来自于对生活的热爱与希望感恩也是一种人生态度它让我们明白了生命的真谛感恩节让我们借着这样的机会对所爱的
(转)临秋记述对上世纪末部队大院的缅怀与追忆真的是七月流火啊正在院子里清扫落叶,天天挂着慈祥笑容的丁爷爷是这么说的。记得前一阵子图书馆的孔老师教过我,那是天气就要凉爽起来的意思。虽然很难懂,但是似乎又真的是这样。昨夜刮了一晚
一个人待着,真好头条创作挑战赛不知从何时起,不再喜欢往热闹的地方凑不再喜欢和认识的人住一个社区不再喜欢结伴外出游玩。总之,空余的时间只想自己待着。一个人,仿佛更加自在。一个人待着家发呆,一个人外出
心语新慰丨放弃不难,但坚持一定很酷有时,去治愈常常,去帮助总是,去安慰这是百年前,一位医生的墓志铭。流传至今,依旧激励着一代又一代的医人。新华君虽不会诊病治疗,但也希望能通过自己小小的努力,给所有正在与病魔战斗的人
包装再美也不过是自欺欺人而已一个biao子再怎么穿金戴银,也改变不了她ji女的身份一个魔鬼再怎么鼓吹粉饰,也改变不了它邪恶的本质。就像一个社会,总有一部分人在发展着自欺力。明明是在撒谎,却一直要求别人相信,到
那些心灵鸡汤该不该听?看了那么多心灵鸡汤,真的对你有用吗?假如是对你有协助,充溢正能量,积极向上的心灵鸡汤,那么就是好的。当一个人心情失落之时,常常更容易被人牵着鼻子走,而遗忘了本人最初要的东西,关于一