【发布时间】:2013-03-04 01:06:48
【问题描述】:
我正在处理这个website
我正在使用此脚本调整垂直图像的大小:
function Gallery(selector) {
this.add_module = function (type, image) {
var portrait_text = image.next('.portrait_text');
var container = $('<div />', {
'class': 'gallery_container'
}).append(image).append(portrait_text);
if (type == 'horizontal') {
var h_ar = image.attr('height') / image.attr('width');
var c_width = selector.width();
var c_height = selector.width() * h_ar
container.css({
'width': c_width,
'height': c_height
})
}
if (type == 'vertical') {
var c_width = v_width;
var c_height = v_height
container.css({
'width': Math.floor(v_width),
'height': v_height
})
}
container.css({
'float': 'left',
})
container.find('img').attr({
'width': '100%',
'height': '100%'
})
container.attr('ar', c_height / c_width)
container.appendTo(selector);
//container.children('img').fitToBox();
}
this.resized = function () {
//console.log(sel)
$('.gallery_container').each(function () {
if ($(this).attr('ar') >= 1) { // vertical
$(this).css({
'width': sel.width() / 2,
'height': sel.width() / 2 * $(this).attr('ar')
})
} else { // horizontal
$(this).css({
'width': sel.width(),
'height': sel.width() * $(this).attr('ar')
})
}
})
}
var _this = this;
var gutter = 0;
// start vars for counting on vertical images
var v_counter = 0;
var w_pxls = 0;
var h_pxls = 0;
var v_ar;
// iterates through images looking for verticals
selector.children('img').each(function () {
if (parseInt($(this).attr('width')) < parseInt($(this).attr('height'))) {
v_counter++;
h_pxls += $(this).attr('height');
w_pxls += $(this).attr('width');
v_ar = $(this).attr('height') / $(this).attr('width')
}
})
// calculates average ar for vertical images (anything outside from aspect ratio will be croped)
var h_avrg = Math.floor(h_pxls / v_counter);
var w_avrg = Math.floor(w_pxls / v_counter);
var v_width = Math.floor((selector.width()) / 2);
var v_height = v_width * v_ar;
var sel = selector;
selector.children('img').each(function () {
if (parseInt($(this).attr('width')) > parseInt($(this).attr('height'))) {
_this.add_module('horizontal', $(this));
} else {
_this.add_module('vertical', $(this));
}
})
$(window).bind('resize', _this.resized);
}
var gallery = new Gallery($('#gallery_images_inner'));
我遇到的问题是脚本使所有容器的高度相同(取决于我认为页面上的最后一个图像),因此例如第一个图像以不好的方式调整大小。如果您查看示例,所有 2 个图像行的高度均为 613 像素。
有什么办法可以控制每两个图像容器根据其图像计算它自己的高度,现在它看起来计算最后一个图像调整高度和将其应用于所有其他容器
应用 height: auto 而不是 100% 将不起作用,因为它不会使图像适合垂直容器的高度。
如何修复脚本?
【问题讨论】:
-
看起来您需要将 $('.gallery_container').each 移到计算之外,以便为每个图像更新 sel。对于任何想解决它的人,我已经为你的问题添加了一个小提琴。
-
感谢您的小提琴 isherwood,让我们看看是否有人可以帮助我:)
-
@grafiker 你可以添加一张你想要实现的图片。我没有真正关注
-
我认为您不应该像这样调整它们的大小,因为它会使页面加载速度变慢。而是在图像编辑器中调整它们的大小并添加到投资组合中,然后将其链接到实际图片。
标签: javascript jquery html css ajax