我认为您在这里需要一种非常结构化的方法。
有很多因素决定了加载图像需要多长时间,并且它会在准备好后立即显示。你可以隐藏一些直到你准备好展示它们,但是你仍然会一次加载大量图像,这既慢又痛苦。
你显然有一个“创造性”的理由来按特定顺序加载(背景优先等)——所以接受这一点……你几乎可以通过制定一个时间表来编排加载。
然后从初始页面加载中删除除第一波图像之外的所有图像。由于这些是 CSSbackground-image
属性,这意味着将它们从样式表中删除。
background-image
然后,您可以通过使用 jQuery设置它们的样式属性来加载每个后续的图像集:
$('.foreground').css('background-image', 'url(<path>)');
要创建“序列”,您将希望每组图像在前一组完成加载时开始加载 -此处讨论了检测背景图像何时完成加载- 但模式可能如下所示:
var loadNextImageSet = function() {
var imageSet = listOfImageSets.pop();
loadImages(imageSet);
};
$(document).on('images-loaded', function() {
loadNextImageSet();
});
loadNextImageSet();
whereloadImages()
异步启动图像加载并在完成后触发自定义images-loaded
事件。
如果您仍然希望您的页面在没有 JavaScript 的情况下仍能正确加载(尽管不是那么顺利),您可能需要尝试 2 个样式表 - 一个包含所有图像(针对非 JS 用户)和一个仅包含第一波(针对 JS 用户) )。然后,您可以确保选择正确的,如下所示:
<html>
<head>
...
<noscript>
<link rel="stylesheet" href="full.css">
</noscript>
</head>
<body>
<script>
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'background-only.css';
document.head.appendChild(link);
</script>
...
</body>
</html>
不是最简洁的 JavaScript 使用方式,但<script>
元素必须尽可能早,以避免出现无样式的内容。