我正在编写一些代码,这些代码将依次加载一堆(20+)大图像(每个约 500 KB)。在每个图像加载后,它都会淡入。我使用这个讨论中的这个小提琴作为起点。
我已经按照我想要的方式加载了图像,但是我需要在不破坏这种顺序加载的情况下做一些其他的事情。我需要在第三个和第四个图像之间加载包含 iframe 的标记,并且我需要在图像之后加载一个链接。这是我需要的标记输出示例:
<div id="container">
<img src="img-1.jpg" />
<img src="img-2.jpg" />
<img src="img-3.jpg" />
<div><iframe></iframe></div>
<img src="img-4.jpg" />
<img src="img-5.jpg" />
<img src="img-6.jpg" />
<img src="img-7.jpg" />
<img src="img-8.jpg" />
<img src="img-9.jpg" />
<a href="/link/">Link text</a>
</div>
我可以很好地加载图像,但是我只在前三个加载后才加载该 iframe,然后加载其余图像,然后加载链接。这是我当前的javascript:
var no = 22,
main = [],
i;
for (i = 1; i <= no; i++) {
main[i] = "path/to/image/folder/img-" + i + ".jpg";
}
function loadImages(arr,loc) {
if (arr.length === 0) {
return;
}
function imageLoaded(img) {
$(img).hide().appendTo(loc).fadeIn(800);
}
function loadImage() {
var url = arr.shift(),
img = new Image(),
timer;
img.src = url;
if (img.complete || img.readyState === 4) {
imageLoaded(img);
if (arr.length !== 0) {
loadImage();
}
}
else {
timer = setTimeout(function() {
if (arr.length !== 0) {
loadImage();
}
$(img).unbind("error load onreadystate");
}, 10000);
$(img).bind("error load onreadystatechange", function(e) {
clearTimeout(timer);
if (e.type !== "error") {
imageLoaded(img);
}
if (arr.length !== 0) {
loadImage();
}
});
}
}
loadImage();
}
loadImages(main,"#container");
“no”变量设置要循环通过的图像数量(我需要在具有不同图像数量的多个页面上执行此操作),并且 loadImages 函数接受要循环通过的数组以及放置图像的位置的参数。这段代码可能会更干净,但我是 javascript 新手。任何帮助将不胜感激!