在我看到你的照片后更新了我的答案,你的照片会是什么样子。
这是基于这个jsfiddle.net/7dpHK/2(charlietfl对你的问题发表了评论)。它几乎可以像您想要的那样工作,但是由于图像周围的那些 4px 边框/填充,它出现了问题。也有一些令人困惑的 CSS。所以你必须计算你的边界,如:
var border = $("#boxToScale img").length * 4;
然后从 中减去它parentW
:
parentW = $box.width() - border
工作示例。
JS:
var border = $("#boxToScale img").length * 4; // 4px padding around every image
var $box = $('#boxToScale'),
parentW = $box.width() - border,
parentH = $box.height(),
imageTotalW = 0,
imageTotalH = 0,
$imgs = $box.children();
$imgs.each(function () {
var img = $(this),
ht = img.height(),
w = img.outerWidth()
imageTotalW += w;
img.data('w', w);
});
var img_width_ratio = parentW / imageTotalW;
$imgs.each(function (idx) {
var $this = $(this),
$prev = $this.prev();
$this.width($this.outerWidth() * img_width_ratio);
});
演示
JS:
function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) {
var ratio = [maxWidth / srcWidth, maxHeight / srcHeight ];
ratio = Math.min(ratio[0], ratio[1]);
return { width:srcWidth*ratio, height:srcHeight*ratio };
}
imagesInContainer = $("#boxToScale img").length;
var toWidth = $("#parentContainer").width() / imagesInContainer;
var toHeight = $("#parentContainer").height() / imagesInContainer;
$("#boxToScale img").each(function(){
var imageWidth = $(this).width();
var imageHeight = $(this).height();
var getRatio = calculateAspectRatioFit(imageWidth, imageHeight, toWidth, toHeight);
$(this).width(getRatio.width);
$(this).height(getRatio.height);
});
注意:图像中的 1px 边框可能会导致此代码出错。在此处查看无边界示例。