【问题标题】:Container height based on every 2 images row基于每 2 个图像行的容器高度
【发布时间】: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'));

http://jsfiddle.net/mZ2Ks/

我遇到的问题是脚本使所有容器的高度相同(取决于我认为页面上的最后一个图像),因此例如第一个图像以不好的方式调整大小。如果您查看示例,所有 2 个图像行的高度均为 613 像素。

有什么办法可以控制每两个图像容器根据其图像计算它自己的高度,现在它看起来计算最后一个图像调整高度和将其应用于所有其他容器

应用 height: auto 而不是 100% 将不起作用,因为它不会使图像适合垂直容器的高度。

如何修复脚本?

【问题讨论】:

  • 看起来您需要将 $('.gallery_container').each 移到计算之外,以便为每个图像更新 sel。对于任何想解决它的人,我已经为你的问题添加了一个小提琴。
  • 感谢您的小提琴 isherwood,让我们看看是否有人可以帮助我:)
  • @grafiker 你可以添加一张你想要实现的图片。我没有真正关注
  • 我认为您不应该像这样调整它们的大小,因为它会使页面加载速度变慢。而是在图像编辑器中调整它们的大小并添加到投资组合中,然后将其链接到实际图片。

标签: javascript jquery html css ajax


【解决方案1】:

是的,有一个简单的方法。但首先:你的画廊脚本计算里面所有图像的平均纵横比。没有简单的方法可以改变这种行为。

但是您可以执行这个简单的解决方法:将 echt 两张图片放在各自的图库中!

var gallery1 = new Gallery($('#gallery_images_inner1'));
var gallery2 = new Gallery($('#gallery_images_inner2'));
var gallery3 = new Gallery($('#gallery_images_inner3'));

http://jsfiddle.net/mZ2Ks/2/ - 我不得不稍微清理一下你的html代码 - 你从(我假设)firebug复制了“受javascript影响”的html代码,但你应该直接从源代码复制纯html(CTRL + U 在 Firefox 中)。

【讨论】:

  • 谢谢斯蒂芬,你是对的,问题是纵横比计算所有图像的平均值。我认为您提出的解决方法行不通,因为客户会上传新图片,所以我不能用这种方法控制他们自己的画廊......无论如何,谢谢!
猜你喜欢
  • 2018-10-06
  • 2022-01-20
  • 2016-10-05
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多