我打算称之为FOUC问题;例如“无风格内容的Flash”。很常见。自从20世纪后期以来,Safari就因此而臭名昭着。
简短的回答:最初设置visibility:hidden
您的元素与内联风格。然后使用JavaScript在加载后设置visibility:visible
。
通常,解决方案是隐藏内容直到加载内容,然后在准备就绪时显示它。通常在内容加载时,您将显示某种类型的微调器。
从技术上讲,有很多方法可以做到这一点。您可以切换CSS display
,visible
和/或opacity
设置。你可以用高z-index
(我称之为“面纱”id="veil"
)显示覆盖div,然后在加载内容时将其删除,并使用微调器作为面纱。您也可以将事物从屏幕上完全移出,直到它们已经加载完毕,然后将它们移动到位。你可以结合这些方法。
就我个人而言,我已经获得了跨浏览器和跨设备与CSS visibility
财产的最佳成功。我喜欢它如何为布局中的对象保留空间。其他解决方案有时会在移动设备和一些旧版浏览器上出现问题。这里有几个片段让你开始。
首先,使用内联样式将可见性设置为none。
- 免责声明:我不是内联风格的粉丝,并且理解分离关注的概念。在这种情况下,我认为这是必要的,因为它必须具有最高的级联优先级,尽可能快地应用,并且我在跨环境中取得了很好的成功。纯粹主义者会认为这应该放在CSS文件中,但我相信我们不应该遵从任何指导方针;有时我们必须有勇气在强有力的理由下打破常规。让读者决定。
<div id="pan-content" class="clearfix" style="visibility:hidden">
然后,在页面加载(使用jQuery):
$('#window').load(function() {
$('#pan-content').css({visibility:'visible'});
});
这可能被证明是有点慢,因为你在等待,直到整个窗口加载,直到显示的旗帜。您也可以将活动附加到特定资源,这会加快速度。看到下面的帖子:
Detect image load
希望这会有所帮助!
更改加载脚本的顺序。但是如果它们相互依赖,则可能无法工作。另一个解决方法是隐藏元素(用css),直到你的脚本全部完成了他们的工作,然后使它们再次可见(用Javascript)。缺点是,如果有人没有启用Javascript,他们会盯着一个空白页面。 –
实际上,您可以从html代码中看到,顺序是SmoothDivScroll脚本在TN3图像库脚本之前启动,但即使如此,SmoothDivScroll脚本在TN3图像库脚本完成之前仍未完成。我希望有一种方法来定义脚本将以何种顺序加载,或者可以定义脚本“B”只在脚本“A”完成时才开始运行。 – afrikapit