【问题标题】:Bootstrap 3 Equal Height Columns with jQuery need assistance with the js带有 jQ​​uery 的 Bootstrap 3 等高列需要 js 的帮助
【发布时间】:2016-03-26 00:06:29
【问题描述】:

我一直在使用 jQuery 的这一位 (jQuery equal height responsive div rows) 来获得相等的高度,它工作得很好,但是如果使用相同的模式,对于 BS2 和 BS3,它不会扫描行以使高度相等,它会扫描页面本身,然后同一页面上的所有模式(行 > col--)获取页面上最高的高度。这不是期望的实现。

http://jsbin.com/aVavuLeW/14/

上面的 JSBin 有一个使用 BS3 列的示例(它的副本)。您不能在堆叠点的列上具有相对位置,因此这些已被复制用于此 Bin。如您所见,如果您在每一行(在此示例中为 .foo 和 .foo2)创建不同的类,然后列的行为,但如果您决定使用相同的模式,页面上最高的高度将接管。

问题:当使用相同的模式时,如何解决它是基于页面而不是行计算的问题?

谢谢!!!

【问题讨论】:

  • 所以结果是:jsbin.com/uBeQERiJ/4 感谢下面优秀的人类回答和一些调整。由于您使用的是某种 .row > col-pattern,所以效果很好。对于 BS3,您必须有一个内容列,因为这些列没有边距,对于 BS2,您不必这样做,但您需要摆弄它。

标签: jquery twitter-bootstrap equal-heights


【解决方案1】:

如果我理解正确,您希望每行具有相同的高度,基于最高的 div,而每行具有相同的类名值,例如foo 那么下面的代码就是这样做的。这个想法是检查被调整大小的元素的父级,如果父级发生变化,即在调整第二个div.row 的 div 大小时,然后应用更改并重置最大高度的值。为了适用于指定的父级,引入了一个参数来指定父级选择器。 http://jsbin.com/uBeQERiJ/1

$.fn.eqHeights = function(options) {

    var defaults = {  
        child: false ,
      parentSelector:null
    };  
    var options = $.extend(defaults, options); 

    var el = $(this);
    if (el.length > 0 && !el.data('eqHeights')) {
        $(window).bind('resize.eqHeights', function() {
            el.eqHeights();
        });
        el.data('eqHeights', true);
    }

    if( options.child && options.child.length > 0 ){
        var elmtns = $(options.child, this);
    } else {
        var elmtns = $(this).children();
    }

    var prevTop = 0;
    var max_height = 0;
    var elements = [];
    var parentEl;
    elmtns.height('auto').each(function() {

      if(options.parentSelector && parentEl !== $(this).parents(options.parentSelector).get(0)){
        $(elements).height(max_height);
        max_height = 0;
        prevTop = 0;
        elements=[];
        parentEl = $(this).parents(options.parentSelector).get(0);
      }

        var thisTop = this.offsetTop;

        if (prevTop > 0 && prevTop != thisTop) {
            $(elements).height(max_height);
            max_height = $(this).height();
            elements = [];
        }
        max_height = Math.max(max_height, $(this).height());

        prevTop = this.offsetTop;
        elements.push(this);
    });

    $(elements).height(max_height);
};

// run on load so it gets the size:
// can't have the same pattern for some reason or it scans the page and makes all the same height. Each row should be separate but it doesn't work that way.
$(window).load(function() {

//$('[class*="eq-"]').eqHeights();
  $('.foo [class*="eq-"]').eqHeights({parentSelector:'.foo'});
/*$('.foo2 [class*="eq-"]').eqHeights();*/

  }); 

【讨论】:

  • 我把调整大小也卡在了父选择器上,不知道这是否是最好的方法,但效果很好。再次感谢。 jsbin.com/uBeQERiJ/4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2012-10-18
  • 2016-12-24
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多