У меня возникают проблемы при попытке нарисовать большой массив 2D-изображений на холсте. Используя отдельную программу, я беру один большой файл изображения и разбиваю его на более мелкие однородные части. Я использую 2D-массив для представления этой «сетки» изображений, и в идеале, когда я назначаю src для каждого элемента в сетке, это изображение будет нарисовано в нужной точке на холсте, как только оно будет готово. Однако мой код не работает.
var grid = new Array()
/*grid is set to be a 2D array of 'totalRows' rows and 'totalCols' columns*/
/*In the following code, pieceWidth and pieceHeight are the respective height/widths
of each of the smaller 'pieces' of the main image. X and Y are the coordinates on
the canvas that each image will be drawn at. All of the images are located in the
same directory (The src's are set to http://localhost/etc), and each individual
filename is in the form of name(row*totalRows + col).png, ex, traversing the 2D
array left to right top to bottom would give image1.png, image2.png, etc*/
for (var row = 0; row < totalRows; row++)
{
for (var col = 0; col < totalCols; col++)
{
grid[row][col] = new Image();
var x = col * pieceWidth;
var y = row * pieceHeight;
grid[row][col].onload = function () {ctx.drawImage(grid[row][col], x, y);};
grid[row][col].src = "oldimagename" + ((row * totalRows) + col) + ".png";
}
}
Я пробовал запускать этот код в Opera, Firefox, Chrome и Safari. События onload вообще не срабатывают в Opera, Chrome и Safari (я разместил предупреждение внутри функции onload, оно так и не появилось). В Firefox срабатывает только событие загрузки ПЕРВОГО изображения (сетка[0][0]). Однако я заметил, что если я разместил предупреждение сразу ПОСЛЕ того, как я установил src текущего элемента, каждое событие загрузки в Firefox срабатывает, и все изображение рисуется. В идеале я хотел бы, чтобы это работало во всех 4 браузерах (я предполагаю, что IE не будет работать, потому что он не поддерживает холсты), но я просто не знаю, что происходит. Любая помощь/вклад приветствуется.