jQuery等于高度响应div行

dcl*_*son 8 javascript jquery responsive-design equal-heights

我知道这个问题已被问了一百万次,但我正在寻找更具体的东西.

由于我的网站完全响应,我需要基于每行调整div,而不是将所有设置为一个高度.

我使用以下修改代码来设置容器中所有div的高度:

$.fn.eqHeights = function() {
    var el = $(this);
    if (el.length > 0 && !el.data('eqHeights')) {
        $(window).bind('resize.eqHeights', function() {
            el.eqHeights();
        });
        el.data('eqHeights', true);
    }
    return el.each(function() {
        var curTop = 0;
        var curHighest = 0;
        $(this).children().each(function(indx) {
            var el = $(this),
                elHeight = el.height('auto').outerHeight();

            var thisTop = el.position().top;
            if (curTop > 0 && curTop != thisTop) {
                curHighest = 0;
            }

            if (elHeight > curHighest) {
                curHighest = elHeight;
            }

            curTop = thisTop;

        }).height(curHighest);
    });
};
Run Code Online (Sandbox Code Playgroud)

我必须var thisTop = el.position().top;确定哪些元素在同一行但不确定如何将同一行中的所有元素设置为最高值?

当前.height(curHighest);将所有元素设置为相同的高度,无论它们是否在同一行上.

感谢您的帮助.

dcl*_*son 11

管理以使用以下代码段来解决此问题:

$.fn.eqHeights = function(options) {

    var defaults = {  
        child: false 
    };  
    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 = [];
    elmtns.height('auto').each(function() {

        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 Code Online (Sandbox Code Playgroud)

我还添加了指定某个元素的功能,这样就可以获得高度变化.

用法:

$('.equalheight').eqHeights();
$('.equalheight-frame').eqHeights({child:'.frame'});
Run Code Online (Sandbox Code Playgroud)