假设我有一个“容器”元素,其中包含overflow:auto
,其中包含“contents”div。容器的高度为窗户高度的百分比,内容可以是任何高度的要求如何在页面加载时可靠地获得两个元素的尺寸
<div id="container">// Height dependent on window size
<div id="content">
// Arbitrary amount of content here
</div>
</div>
CSS - 请注意我在“现实世界”的场景,内容元素实际上是一个表,与规则如下图所示:
#container {
height:100%;
overflow:auto
}
#content {
border-collapse: collapse;
border-spacing: 0;
}
我想要做的是检查内容的身高是否超过容器的,如果真正做一些事情。
但是,如果我简单地做:
$(document).ready(function(){
var containerH = $('#container').outerHeight();
var contentH = $('#content').outerHeight();
if (contentH > containerH) {
// If the content's too big, do things...
};
});
if语句永远不会运行,因为这两个高度是为等于总计算 - 即使我知道这是情况并非如此。随后的检查总是显示实际尺寸。所以我想:也许元素没有完成渲染(我使用@ font-face来设置元素中的文本样式 - 也许我需要等待完成),然后我尝试去做类似于:
$(document).ready(function(){
var container = $('#container');
var content = $('#content');
function getProperHeight(el){
var height = el.load(function(){
var h = this.outerHeight();
return h;
});
return height;
};
var containerH = getProperHeight(container);
var contentH = getProperHeight(content);
console.log(containerH + ' ' + contentH)
};
这是我使用的方法load()
最接近的,但我得到的翻译:两个预期值。
总之 - 我怎样才能得到两个元素的实际渲染尺寸?
我觉得你的问题是,你正在做的这$计算(文件)。就绪()。您应该尝试将此代码放置在按钮单击事件上并查看它是否有效。 – Hoffmann
我看到你建议的逻辑,但这是在页面加载时工作所必需的。获取用户事件的高度是微不足道的,因为这些元素几乎肯定会被加载。 – verism
我只是想让你试着看看它是否可以在点击按钮上工作。如果它在按钮上工作,那么问题是在$(document).ready()被调用的时候,DOM并没有实际处理你的CSS来按照你想要的方式进行计算。如果是这种情况,您可以在JavaScript上设置CSS或探索其他事件的可能性。 – Hoffmann