Javascript图像预加载程序没有't显示状态
Javascript image preloader doesn't show status
我组装了一个图像预加载程序,它运行良好,但不起作用的是在加载每个图像后更新状态。相反,所有图像都已加载,并且"完成"(最后一行)是唯一显示的内容。当我使用警报而不是innerHTML命令时,它确实有效,但这显然没有用。我做错了什么?
<div id="preloader">
<span id="preloader_status"> </span>
<script language="JavaScript">
imageObj = new Image();
images = new Array();
images[0]="bigimage.gif"
images[1]="anotherbigimage.gif"
/* and so on */
var i = 0;
var o = (images.length);
for (i=0;i<o;i++) {
var status = (Math.round(100*(i/o)));
imageObj.src=images[i];
document.getElementById("preloader_status").innerHTML = status;
}
document.getElementById("preloader_status").innerHTML = "done";
</script>
</div>
要显示图像加载进度,您需要挂接到图像的onload
事件,以便跟踪图像加载实际完成的时间。图像是异步加载的,因此分配.src
仅开始加载图像。直到稍后调用onload
处理程序时,它才完成。因此,您现有的代码将立即显示"完成",因为它没有跟踪图像实际加载完成的时间。
此外,您还将一个新的.src
值连续分配给同一个图像对象,该对象将中止先前的图像加载。您需要为正在加载的每个新图像创建一个新的图像对象。
你可以这样修复你的代码:
<div id="preloader">
<span id="preloader_status"> </span>
<script language="JavaScript">
var imageSrcs = [
"bigimage.gif",
"anotherbigimage.gif"
/* and so on */
];
function preloadImages(list, statusID) {
var img, cnt = 0;
var progress = document.getElementById(statusID);
var preloads = [];
for (var i = 0; i < list.length; i++) {
img = new Image();
img.onload = function() {
++cnt;
var loadPercent = Math.round(100*(cnt/list.length));
progress.innerHTML = loadPercent;
if (cnt == list.length) {
progress.innerHTML = "done";
}
}
img.src = list[i];
preloads.push(img);
}
}
preloadImages(imageSrcs, "preloader_status");
</script>
</div>
for循环几乎会立即发生,因为图像加载是异步的;设置CCD_ 5将只是开始图像请求并继续到下一个。它不会阻止循环的执行。这将导致您所看到的效果,即代码的最后一行将立即执行。
我认为您正在寻找的是JavaScript Image onload
事件,当图像完成加载时,该事件将触发。
var image = new Image();
image.onload = function() {
// always called
alert('image loaded');
};
image.src = 'image.jpg';
代码是从这篇文章中截取的。
相关文章:
- 使用按钮和媒体查询切换显示状态
- 显示服务工作者状态的消息
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 如何在状态输入ui路由器时立即显示模板,然后当承诺被解决时显示数据
- 在弹出窗口中显示状态
- 如何在 jquery 中的速率按钮下方显示消息状态
- 使用codehelper.io显示基于IP位置的状态缩写
- 这个预加载器工作吗?它不用于显示状态,只是加快了以后可能的图像加载速度
- 如何在ui路由器的父模板中显示状态
- 获取受 .slideToggle() 影响的显示状态元素
- 自动对焦属性在 Firefox 中因显示状态更改而不起作用
- 角度 SPA 未显示状态激活的 API 数据
- 如何在iOS UIAutomation中获取按钮突出显示状态
- Javascript图像预加载程序没有't显示状态
- 使用jQuery切换显示状态
- 如何启用窗口.在弹出窗口中显示状态
- 如何解决选择国家时动态显示状态的问题
- 这是在asp.net中显示状态消息的最佳方式
- 切换可见性-显示/隐藏-切换时保持显示状态
- 使用jQuery/Ajax/JS加载PHP文件和显示状态的正确或最佳过程