gpt4 book ai didi

javascript - AddEventListener 和图像加载器问题

转载 作者:行者123 更新时间:2023-11-30 06:38:05 25 4
gpt4 key购买 nike

我的代码中的事件监听器和图像加载器有问题。当我尝试根据事件监听器加载和检查加载图像的状态时,一些图像被跳过。我认为浏览器只能处理一个事件,当事件事件没有停止时,下一个可以工作并跳过它的工作。很少有图像返回错误状态并且可以使用。请就此给我一些建议。这是我的代码:

//Image loader
var urlList = [
'images/ground_02.png', // 0 - FG
'images/ground_layer0.png', // 1 - CITY
...
];
var urlListLength = urlList.length; //length of URL-array
var iCount = new Number(0); // Create zero-counter
var images = new Array(); // All images array. Each elem stores one image
var imageInfo = function(imageName, imageCount, imageWidth, imageHeight) { // Constructor for image data container
this.imageName = imageName; // Url of image
this.imageCount = imageCount; // Frames
this.imageWidth = imageWidth; // Width of images
this.imageHeight = imageHeight; // Height of images
};
var imageData = new Array(); // Images data array
for (var i=0; i!=urlListLength; ++i) { // Loop for each image load
images[i] = new Image(); // Image array.
images[i].addEventListener('load', function(i) {

imageData.push(new imageInfo(images[iCount], images[iCount].width/images[iCount].height, images[iCount].width, images[iCount].height));

iCount++;
if (iCount == urlListLength) {
var loaded = true;
loop();
};

}, false);

images[i].src = urlList[i];
images[i].onerror=function() {
alert("FAIL "+this.src);
};

};

最佳答案

你至少在这里有问题:

imageData.push(new imageInfo(images[iCount], images[iCount].width/images[iCount].height, images[iCount].width, images[iCount].height));

load 事件在浏览器加载图像后触发。但是它没有必要以与加载启动相同的顺序被触发。基本上,images[2] 可以在 images[0]images[1] 之前加载,在这种情况下,iCount 将不起作用。

您可以使用 this 而不是 images[iCount] 因为在这种情况下 this 将准确指向触发加载事件的图像.

imageData.push(new imageInfo(this, this.width/this.height, this.width, this.height));

I think browser can handle only one event and when active one isn't stopped next can work and skip its work.

没有。那是错的。定期会触发所有事件。但是 JS 是单线程的,所以它会简单地将一个事件放入队列中,并在上一个事件完成后运行下一个事件。它不会跳过任何事件。

关于javascript - AddEventListener 和图像加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com