[英]How to getBoundingClientRect from a hidden element? (doesn't work on IE)
我找到了一种从隐藏元素获取getBoundingClientRect
的方法:将其display
样式设置为initial
以便浏览器可以正确计算。 然后立即隐藏该元素,使其永远不会显示给用户。
但它不适用于 IE。 它总是返回0
。
我怎样才能在 IE 上做到这一点?
var element = document.querySelector('#foo'); console.log('Element is hidden', element.getBoundingClientRect()); element.style.display = 'initial'; console.log('Element shows for little time', element.getBoundingClientRect()); element.style.display = 'none';
<div id="foo" style="display: none;">Guess my size, I'm hidden !</div>
遗憾的是,IE 不支持initial
值( mdn )。 所以赋值什么都不做,元素保持隐藏,这就是为什么你得到 0 作为结果高度。
但即使它没有,它不会工作您预期的方式: display: initial
设置为通用初始值display
为所有受影响的元素-这是inline
都对div
S和span
秒。 这里有一些关于这种行为的概念证明。
相反,您必须在隐藏它之前通过自己的代码缓存display
的原始值。 实际上,这正是 jQuery 和其他流行框架对.hide()
的实现所做的:
匹配的元素将立即隐藏,没有动画。 这大致相当于调用 .css("display", "none"),只是 display 属性的值保存在 jQuery 的数据缓存中,以便稍后可以将 display 恢复到其初始值。 如果一个元素的显示值为 inline 并且隐藏然后显示,它将再次内联显示。
这可能会间接回答这个问题 - 如果您需要为隐藏元素使用 getBoundingClientRect() ,另一种选择是以不同的方式隐藏它(除了 display:none)。 例如,将颜色和/或背景颜色设置为透明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.