我有一个 ajax Web 应用程序,每 10 秒我从服务器请求内容。服务器发回带有图像链接的 HTML。现在,我将 div 标签的 innerHTML 设置为从服务器返回的 HTML,它会动态更新网页而不重新加载整个页面。
然而,问题是,图像在设置 innerHTML 后单独加载,导致应用程序看起来很时髦而且很慢。
当我拥有所有资源时,如何准备好所有图像然后交换 innerHTML?
我有一个 ajax Web 应用程序,每 10 秒我从服务器请求内容。服务器发回带有图像链接的 HTML。现在,我将 div 标签的 innerHTML 设置为从服务器返回的 HTML,它会动态更新网页而不重新加载整个页面。
然而,问题是,图像在设置 innerHTML 后单独加载,导致应用程序看起来很时髦而且很慢。
当我拥有所有资源时,如何准备好所有图像然后交换 innerHTML?
向图像的 DOM 添加一个属性(或数据属性),然后使用 jQuery 监听“loaded”事件,将加载的属性更改为 true。然后验证队列中是否有静止图像,如果没有则执行完整过程的回调。
标记:
<img src="img/1.png" class="imgToLoad" loaded="false" />
<img src="img/2.png" class="imgToLoad" loaded="false" />
<img src="img/3.png" class="imgToLoad" loaded="false" />
<img src="img/4.png" class="imgToLoad" loaded="false" />
伪代码:
function allImagesLoaded(){
$('#yourmaindiv').show();
console.log('images loaded!');
}
$('img.imgToLoad').load(function(){
$(this).attr('loaded', 'true');
if( $('img.imgToLoad[loaded=false]').length === 0 ){
allImagesLoaded();
}
});
对于您的图像:
$(function () {
preload();
function preload() {
var imageObj = new Image(),
images = [];
images[0] = 'img/1.png';
images[1] = 'img/2.png';
images[2] = 'img/3.png';
images[3] = 'img/4.png';
images[4] = 'img/5.png';
for (var i = 0; i < images.length; i++) {
imageObj.src = images[i];
}
}
});
<body>
....
<!--[if IE]>
<div id="preload">
<img src="img/1.png" width="1" height="1" alt="" />
<img src="img/2.png" width="1" height="1" alt="" />
<img src="img/3.png" width="1" height="1" alt="" />
<img src="img/4.png" width="1" height="1" alt="" />
<img src="img/5.png" width="1" height="1" alt="" />
</div>
<![endif]-->
</body>
#preload {
position: absolute;
overflow: hidden;
left: -9999px;
top: -9999px;
height: 1px;
width: 1px;
}