【发布时间】:2013-06-28 06:42:57
【问题描述】:
我创建了一个灯箱,可在单击图像时(一次一张)从图库中加载图像。问题是图像没有加载,因此图像的尺寸是未知的。这是代码:
function showimage(image_path) {
imgobj = new Image();
imgobj.src = image_path;
var aspectratio = imgobj.width/imgobj.height;
var newht = imgobj.height;
var newwd = imgobj.width;
if (($(window).height() - 100) < newht) {
newht = $(window).height() - 100;
newwd = newht*aspectratio;
}
if (($(window).width() - 100) < newwd) {
newwd = $(window).width() - 100;
newht = newwd/aspectratio;
}
$('#lightbox img').attr('height', newht);
$('#lightbox img').attr('width', newwd);
$('#lightbox').show();
}
我尝试使用 onLoad,但它会立即触发并且图像仍未加载并且没有提供正确的图像尺寸。 Here我读到当图像已经加载到浏览器中时,会立即调用onLoad。
人们建议在其他任何地方使用时间延迟“setTimeout”,但这似乎不是一个好的解决方案,因为图像可能具有不同的大小并且可能需要可变的时间来加载。
任何人都可以建议我如何解决这个问题。
编辑 1:
感谢下面的回答,我可以使用 load() 获得该功能。但是现在,如果图像已经加载并已显示在灯箱中,则再次单击。 load() 中的函数没有被调用,也没有出现灯箱。有什么建议吗?
编辑 2:
解决方案:这对我有用:
function showimage(image_path) {
imgobj = new Image();
imgobj.src = image_path;
if (imgobj.complete == false)
$(imgobj).load(function(){processimage(imgobj);});
else
processimage(imgobj);
}
function processimage(imgobj) {
var aspectratio = imgobj.width/imgobj.height;
var newht = imgobj.height;
var newwd = imgobj.width;
if (($(window).height() - 100) < newht) {
newht = $(window).height() - 100;
newwd = newht*aspectratio;
}
if (($(window).width() - 100) < newwd) {
newwd = $(window).width() - 100;
newht = newwd/aspectratio;
}
$('#lightbox img').attr('height', newht);
$('#lightbox img').attr('width', newwd);
$('#lightbox').show();
}
【问题讨论】:
-
$(window).load会等到所有外部文件都下载完...你可以使用它 -
与其编辑问题以显示您是如何解决的,请接受下面的答案,或添加您自己的解决方案作为新答案。这让以后会查看此问题的其他人更清楚,并允许您的答案被投票赞成/反对,并与可能给出的其他答案进行比较。如果它是最好的答案,您甚至可以接受自己的答案。