Это сводит меня с ума.
Мне нужно загрузить массив изображений в Javascript, но я хочу убедиться, что все изображения загружены перед началом их рисования. Итак, я занят - жду, когда будет вызвано каждое событие onLoad для изображения. Сначала я создаю изображения и устанавливаю их источник и функцию загрузки:
// Load images from names
for (i = 0; i < this.nImages; i++) {
this.imagesArray[i] = new Image();
this.imagesArray[i].onload = this.onLoad(i);
this.imagesArray[i].src = images[i];
}
Это функция onLoad, член класса, который я разрабатываю (первые два шага были в конструкторе):
MyClass.prototype.onLoad = function (nimage) {
console.log ("Image completed? ", nimage, " ", this.imagesArray[nimage].complete);
this.imagesLoaded++;
}
Затем я занят, ожидая, пока все функции onLoad увеличат счетчик (снова в конструкторе):
while (this.imagesLoaded < this.nImages) {
// This is busy wait, and I don't like it.
continue;
}
Пока все хорошо. Но когда я пытаюсь нарисовать его на холсте HTMl5 с помощью drawClass:
MyClass.prototype.refresh = function () {
// Gets one of the images in the range
var imageNum = this.GetImageNum();
// Test for completeness. This gives FALSE :(
console.log ("completeness for image number ", imageNum, " is: ", this.imagesArray[imageNum].complete);
this.drawClass.draw(this.imagesArray[imageNum], this.xOrigin, this.yOrigin);
}
строка console.log дает false , и я получаю печально известное исключение NS_ERROR_NOT_AVAILABLE.
Обратите внимание, что функция refresh () вызывается после функции onLoad (), согласно Firebug.
Что мне здесь не хватает?