【发布时间】:2021-04-03 11:27:49
【问题描述】:
所以在对我遇到的问题进行了大量搜索之后,我发现我遇到的问题是,因为当我将 css 应用于元素时,信息无法立即获得,这就是我的意思:
我有一个元素,我用display: block; 和display: none; 隐藏和显示,问题是在我显示元素后,我需要获取它的高度:
$element.css({ display: "block"});
console.log($element.outerHeight()); // <- this returns 0
所以我在某个时候开始尝试超时,即使有 1 毫秒的超时,它仍然可以工作并返回正确的高度:
setTimeout(() => {
console.log($element.outerHeight()); // with 1ms timeout, it works and gives real height
}, 1)
在弄清楚这一点后,有 1 毫秒的延迟它不可能是某种继承的转换或任何东西,所以这让我想到,也许在从 display: block; 跳转到 .outerHeight() 之间,经过一番挖掘,某些东西尚未更新我发现了这个:
引用:“您将在不同的浏览器中看到不同的行为,因为 jQuery 使用内联样式更新标记并且浏览器决定何时重绘。”
Does jQuery's css method block until the change is fully applied?
这似乎是我的实际问题,所以现在的问题是,我如何确定重绘发生的时间,我尝试了 onload、load 事件,但没有一个事件被触发。
我还尝试了该帖子中建议的带有动画的代码:
$element.animate({
display: 'block'
}, {
duration: 0,
done: function(animation, jumpedToEnd) {
console.log($element.outerHeight());
}
})
但这也不起作用。
【问题讨论】:
标签: javascript jquery css