我正在加载一个json文件并将其解析成Javascript中的一个数组。其中一个元素是图像的路径。我还没有准备好加载图像,但我需要获取图像的高度。我知道该怎么做,与如下代码(在其它计算器网页中找到)Javascript:如何获取循环中未加载图像的高度?
function getimageheight(img) {
var tmpImg = new Image();
tmpImg.onload = function() {
var ht = this.height;
return ht+0;
}
tmpImg.src = img;
}
如果我尝试调用这个函数在一个循环中,因为对于图像的onload运行比慢返回undefined循环。我实际的代码是这样的:
var j = 0;
$.each(cat.placemarks, function(index, mark) {
markers[cat.name][j] = [];
markers[cat.name][j].name = mark.name;
markers[cat.name][j].title = mark.title;
markers[cat.name][j].markerURL = mark.markerURL;
markers[cat.name][j].imageURL = mark.imageURL;
markers[cat.name][j].imageHEIGHT = getimageheight(projpath+mark.imageURL);
j++;
});
如果我一旦调用该函数,它的工作原理。但是在循环中调用它不会。我怎样才能解决这个问题?
我可以误读的东西,但我很困惑,你说这是工作,当你调用该函数一次。你的'getImageHeight()'函数没有返回任何东西。你的'onload()'函数的返回值不会在任何地方发生,当然不会返回到调用'getImageHeight()'的代码。您无法获取未加载的图像的高度。你的'onload'函数只能获取高度,因为它在载入图像后运行**。 – GreatBigBore
如果我在退货前提醒(ht),它会显示正确的值。它为什么不返回它? –
看起来你已经得到了一些其他的反馈,但如果你仍然有这个问题,请考虑:'load(function(){/ * do stuff * /})'不会导致'/ *做些什么*/'在调用'load()'时发生。当图像加载完成后,会导致'/ *做些* /'操作*。有人在另一条评论中提到异步执行。研究一下。在javascript中,你必须考虑启动一件事情,退出启动该事件的函数,然后在完成该事情后再次在另一个函数中唤醒。 – GreatBigBore