为什么它不一次输出所有数组元素
Why doesn't it output all array elements at once?
这段代码有什么问题:
var images = [];
function getImages() {
var st = true;
var i = 1;
var url;
var ob;
while(st) {
if(i < 10) {
url = "http://rachel-b.org/gallery/albums/Events/2012/May%2008%20-%20Rachel%20Bilson%20Celebrates%20Edie%20Rose%20Home%20Collection/thumb_00" + i + ".jpg";
ob = new Image();
ob.src = url;
st = checkIfImageExists(ob);
images.push(ob);
}
if(i >= 10 && i < 100) {
url = "http://rachel-b.org/gallery/albums/Events/2012/May%2008%20-%20Rachel%20Bilson%20Celebrates%20Edie%20Rose%20Home%20Collection/thumb_0" + i + ".jpg";
ob = new Image();
ob.src = url;
st = checkIfImageExists(ob);
images.push(ob);
}
if(i >= 100) {
url = "http://rachel-b.org/gallery/albums/Events/2012/May%2008%20-%20Rachel%20Bilson%20Celebrates%20Edie%20Rose%20Home%20Collection/thumb_" + i + ".jpg";
ob = new Image();
ob.src = url;
st = checkIfImageExists(ob);
images.push(ob);
}
i++;
}
}
function checkIfImageExists(o) {
var e = document.createElement("img");
e.style.display = "none";
document.getElementsByTagName("body")[0].appendChild(e);
e.src = o.src;
var res = e.width;
document.getElementsByTagName("body")[0].removeChild(e);
console.log(res);
if(res === 0) {
return false;
} else {
return true;
}
}
getImages();
function outPut() {
for(var i = 0; i < images.length; i++) {
console.log(images[i]);
}
}
outPut();
演示
为什么它不一次输出所有数组元素?同时,每次我按下运行按钮时,它都会输出 n+1 个数组元素。怎么来了?
这是我
的重写
当找不到更多图像时,DEMO 停止 - 在本例中为 106 张图像
var images =[];
var baseUrl = "http://rachel-b.org/gallery/albums/Events/2012/May%2008%20-%20Rachel%20Bilson%20Celebrates%20Edie%20Rose%20Home%20Collection/thumb_";
function pad(num) {
var str = "00"+num;
return str.substring(str.length-3);
}
function output() {
for (var i=0;i<images.length;i++) {
console.log(images[i].src)
}
}
function getImages(){
var ob = new Image();
var url = baseUrl+pad(images.length+1)+".jpg"
ob.onload=function() {
images.push(ob);
getImages();
}
ob.onerror=function() {
output();
}
ob.src= url;
}
getImages();
你的checkIfImageExists()函数是原因。 我了解您要完成的任务,但是您正在检查宽度而不给图像加载时间。 您应该绑定到图像对象的加载和错误。 (有关更多详细信息,请参阅 http://lucassmith.name/2008/11/is-my-image-loaded.html)。
如果你真的希望这些图像异步加载,这个while循环是非常危险的,你最好已经知道上限而不是试图猜测。 如果您确实想要异步并且具有未知的最大值...然后,您应该一次将有限数量的图像分块以加载(以及添加某种类型的setInterval。 否则,通过此设置,当服务器为图像返回 404 时,脚本已经尝试加载数千个无效图像。
如果您需要一个代码示例,请告诉我,但这至少应该为您指明正确的方向。
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 加载器组件仅加载一次
- 根据Angular.JS上一次的内容禁用选择
- 一次又一次地在新的和相同的选项卡中打开一个url
- 只在宽度以下和宽度以上各准备一次
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- Angularjs:空对象,当只有一次点击时
- 在Angular应用程序中每个帖子投票一次
- 主干模型更改事件只触发一次
- Javascript输出只显示一次
- JavaScript事件只循环一次,没有输出
- 文档.循环中的getElementById只输出一次