【发布时间】:2017-11-21 17:49:13
【问题描述】:
我试图深入了解为什么我会看到以下内容,以及如何解决它:
我有一个下面链接的测试页面,它有一个极小的 DOM,我在页面上有一个元素,它的初始高度值完全用 CSS 设置,在准备好文档时,一个 jQuery 函数会触发,它会为它分配一个新的高度值那个元素,我的问题是,当页面构建时,这种变化在视觉上很明显,你可以看到元素从 jQuery 函数中快速获得新的高度值,我的目标是防止这种情况,所以当页面加载时你只会看到具有 jQuery 高度值的元素。我认为 JavaScript 渲染会阻止页面在浏览器中构建,直到所有文档就绪函数都被触发,除非已设置异步或延迟,但现在我假设我错了。
编辑:
为了澄清,这只是一个例子,我试图解决的问题与高度无关,我试图找到一个解决方法,以解决我的 jQuery 应用 CSS 时存在视觉延迟的事实准备好文档,并更好地理解延迟存在的原因。
整个 DOM:
<style>
html {
background: #eee;
}
.box {
height: 64px;
width: 50%;
max-width: 280px;
max-width: 1280px;
margin: 64px auto 0 auto;
position: relative;
background: #fff;
box-shadow: 0 0.08em 0.25em 0 rgba(0,0,0,0.3);
}
</style>
<script type='text/javascript' src='[my path]/js/jquery-3.1.1.min.js?ver=3.1.1'></script>
<script type="text/javascript">
jQuery(document).ready(function(){
function adjustBox() {
windowHeight = window.document.documentElement.clientHeight;
$('.box').css('height', windowHeight * 1/2);
}
adjustBox();
});
</script>
<div class="box"></div>
【问题讨论】:
-
为什么不把 CSS 中的高度设置为
50vh? -
好吧,我应该澄清一下,这只是一个测试示例,我想了解的问题是如何防止 javascript 在页面加载时延迟生效。
-
你总是可以为元素设置动画??否则 CSS 是最好的方法,你的确切问题是什么,通常提供一个例子可以带来与你的需求不相关的答案。
-
您无法阻止 javascript 运行延迟。您可以使用加载叠加层并在设置高度后隐藏它
-
好吧,我的问题有点跨项目,但高度示例与我的真实代码问题相当接近,我一直在假设页面在文档准备好的 JS 后呈现在视口中的情况下进行编码已经应用了,而不是之后,所以听起来解决方案是主动的,并且避免了延迟造成问题的场景。对于我当前的项目,我可能只是将整个页面的淡入动画作为创可贴修复。
标签: javascript jquery dom onload jquery-deferred