我创建了一个灯箱,当单击图像时(一次一个),它会从图库中加载图像。问题是图像没有加载,因此图像的尺寸是未知的。这是代码:
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,但这会立即触发并且图像仍未加载并且没有提供正确的图像尺寸。在这里,我读到当图像已经加载到浏览器中时,会立即调用 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();
}