ResizeObserver监听浏览器宽高及元素宽高变化

ResizeObserver 接口可以监听到 Element 的内容区域或 SVGElement的边界框改变。内容区域则需要减去内边距padding。(有关内容区域、内边距资料见盒子模型 )

ResizeObserver避免了在自身回调中调整大小,从而触发的无限回调和循环依赖。它仅通过在后续帧中处理DOM中更深层次的元素来实现这一点。如果(浏览器)遵循规范,只会在绘制前或布局后触发调用。

Experimental: 这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

angular2版本的使用

……
private ro: ResizeObserver | null = null;
……
ngAfterViewInit(): void{
    const targetElement = dialogElement.querySelector('#target');
    this.ro = new ResizeObserver((entries, observer) => {
        if (!!targetElement) {
            let height = window.innerHeight - 60;
            this.dialogHeight = height;
            if (height > 680) {
                height = 680;
            }
            const innerHeight = height + 'px';
            const marginTop = '-' + height / 2 + 'px';
            this.render.setStyle(targetElement, 'height', innerHeight);
            this.render.setStyle(targetElement, 'margin-top', marginTop);
        }
    })
    // 监听浏览器窗口的变化,可以为其它元素
    this.ro.observe(document.body);
}

ngOnDestroy(): void { 
    this.ro.unobserve();
}

这个东西在angular7下好像有个bug,当浏览器高度缩放可以,然后再放大,目标元素targetElement不会随着窗口的变大而变大,宽度调整是没问题,最后还是选择了用window.addEventListener('resize', () => {});

参考:ResizeObserver - Web API 接口参考 | MDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值