有时 JavaScript 对我来说没有意义,请考虑以下代码,该代码基于 x/y 平铺生成照片马赛克。下载每个马赛克图像后,我正在尝试将 .Done 属性设置为 true,但由于某种原因它总是错误的,我做错了什么?
var tileData = [];
function generate()
{
var image = new Image();
image.onload = function()
{
// Build up the 'tileData' array with tile objects from this Image
for (var i = 0; i < tileData.length; i++)
{
var tile = tileData[i];
var tileImage = new Image();
tileImage.onload = function()
{
// Do something with this tile Image
tile.Done = true;
};
tileImage.src = tile.ImageUrl;
}
};
image.src = 'Penguins.jpg';
tryDisplayMosaic();
}
function tryDisplayMosaic()
{
setTimeout(function()
{
for (var i = 0; i < tileData.length; i++)
{
var tile = tileData[i];
if (!tile.Done)
{
tryDisplayMosaic();
return;
}
}
// If we get here then all the tiles have been downloaded
alert('All images downloaded');
}, 2000);
}
现在由于某种原因,对象.Done
上的属性tile
始终为 false,即使它在内部被明确设置为 true tileImage.onload = function()
。而且我可以确保您确实调用了此函数,因为我已在alert()
其中进行了调用。现在它只是被困在一个tryDisplayMosaic()
不断调用的无限循环中。
此外,如果我在调用之前放置一个循环tryDisplayMosaic()
,并在该循环中设置.Done = true
,则.Done
属性为 truealert('All images downloaded');
并将被调用。