【发布时间】:2014-11-29 17:58:22
【问题描述】:
我知道有类似的问题,但答案对我不起作用(示例如下)。首先,我的(简化的)代码。
HTML:
<div id="loading_screen">
<img src="<?= base_url()?>images/loading_screen.png" title="The game is loading, please wait.."/>
</div>
<div id="container">
<!-- a whole lot of HTML content here -->
</div>
CSS:
#container{
display:none;
}
JS:
$(document).ready(function(){
//when document loads, hide loading screen and show game
$('#loading_screen').hide();
$('#container').show();
})
这个想法很简单:我最初显示加载屏幕并隐藏container;加载完所有内容后,我会隐藏加载屏幕并显示容器。
但是,它不起作用。只要container div 开始 加载,JS 代码就会立即启动。
loading_screen div 只有 1 个小图像 (20KB),container div 总共大约 400KB。
容器 div 中有图像,以及它的一些子元素上的背景图像。所以根据this question的答案,我把代码改成了$(window).load(function()。但是,这并没有解决问题。
我想我可以执行以下操作 - 一开始甚至不创建容器 div,而仅在加载 div 加载后创建它及其所有内容。但是,我宁愿不走那条路,容器中有服务器端代码,我必须添加包含等,这是不值得的。我很高兴看到 20KB 的图像会在 400KB 的内容之前加载,我只需要让代码在 400KB 加载之前不会触发。
编辑:
我将这段代码添加到 JS(在 onload 函数之外)以查看页面加载时发生的情况:
setInterval(function(){
var st1 = $('#loading_screen').css("display");
var st2 = $('#container').css("display");
console.log(st1+" "+st2);
},100);
一直输出none block,表示loading_screen立即隐藏,容器立即可见。
【问题讨论】:
-
在所有图像加载完成之前,窗口“加载”事件确实不会触发。 (除了阅读@rodrigogq 发布的那些东西我可能是错的......)
-
是还在等待加载的背景图片吗?还是所有图片?是否有通过 AJAX 请求加载的内容?
-
立即,好像,我什至没有看到加载器 div...没有通过 AJAX 加载的内容。
-
图片是否已经被浏览器缓存了?
-
我已经完全关闭了缓存,它们每次都从服务器加载。
标签: javascript jquery html css