我相信,下面的代码会等到图像完全加载完毕:
$('.some-img').load(function(){
$('.img-container').show();
});
然而,我想要的是等到图像开始加载并根据图像的高度调整图像容器的高度。
容器的高度是响应式的 height: auto
并且图像有不同的高度,所以容器开始时没有高度(只有 20px 填充),然后根据里面的图像,每次加载时都会有点刺耳。
有什么方法可以检查图像是否已开始加载,以便我可以调整图像容器的高度,然后执行$('.imagemodal-container')。 show()
,因为等待整个图像加载不是好的用户体验。
使用 this answer 中的 getImageSize
函数:
function getImageSize(img, callback) {
var $img = $(img);
var wait = setInterval(function() {
var w = $img[0].naturalWidth,
h = $img[0].naturalHeight;
if (w && h) {
clearInterval(wait);
callback.apply(this, [w, h]);
}
}, 30);
}
由于大于 img wrapper 宽度 (600px) 的图像会按比例缩小以适合,我必须根据比例调整高度,并且还要考虑 20px + 20px 顶部和底部的恒定填充:
getImageSize($('.showcase-img'), function(width, height) {
width > 600 ? calculatedHeight = 600/width * height + 40 : calculatedHeight = height + 40;
$('.showcase-img-wrapper').css("height", calculatedHeight+"px");
$('.imagemodal-container').show();
});