js+监视html发生变化,【Web前端问题】JS怎么实时监视一个div尺寸变化?

这篇博客探讨了如何在JavaScript中监测元素尺寸的变化。提到了css-element-queries库提供的ResizeSensor类和MutationObserver接口。ResizeSensor利用滚动事件实现高性能的尺寸监测,而MutationObserver则可以观察style属性变化。文章还讨论了window.onresize的局限性,并提出了替代方案,如定时器轮询和监听onpropertychange事件。博客旨在找到最佳实践来动态响应元素尺寸的更新。

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

类似resize一样

回答:

回答:

这个css-element-queries可以实现元素级别的基于宽高的queries,同时提供一个ResizeSensor类,可以酱紫用:

new ResizeSensor(document.querySelector('#divId'), function(){

console.log('content dimension changed');

});

原理嘛,用的是 requestAnimationFrame 监测,低版本浏览器用的是setTimeout(fn, 20)定时轮询。

所以最好还是通过程序逻辑实现,程序数据变化导致 DOM 变化,从而浏览器重新绘制,再通过浏览器绘制事件然后反过来监测 div 尺寸变化,这个回路有点长。

回答:

正要推荐,看到有人提到 css-element-queries 了,然而这个并不是通过 requestAnimationFrame 轮询的,是非常巧妙地基于滚动事件触发的,性能非常可观,原理可以看这里。

回答:

onresize好像只能对window设置, 对div发现不起效果。

是什么事件触发了div的改变大小?把事件写到那里去不行?

回答:

我给个比较另类的思路,可以用MutationObserver来监控style上的变化~

Demo代码:

var observer = new MutationObserver(function (mutations, observer) {

mutations.forEach(function (mutation) {

console.log(mutation);

});

});

var config = {

attributes: true,

attributeOldValue: true,

attributeFilter: [

'style'

]

};

var el = document.getElementById('keng'); //这个你自己改下~

observer.observe(el, config);

不过这个方法的限制在于,它只能监控style上的样式变化。。。

回答:

回答:

你是怎么让div的尺寸发生变化的?难道不是通过改变一个值吗?这个值你保存起来就行了呀。

回答:

我猜想你的需求应该是在窗口变化的时候,刷新某一块元素的内容。

要处理这个情况,一般情况下会把对应元素设置成百分比,这样在窗口大小变化的时候,元素也自然会发生变化。

如果需求是我所说的这样,监听window.resize即可。

回答:

目前想到的办法是设置一个定时器去轮询

回答:

监听onpropertychange事件,事件发生时对比上一次的width和height。不知道可不可行,突然想到的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值