我知道这个问题已经被问无数次,但我正在寻找更具体的东西。
由于我的网站是完全针对我需要调整大小的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);
});
};
我有var thisTop = el.position().top;
以确定哪些元素是在同一行,但我不能确定我怎么能那么设置在同一行中的最高值的所有元素?
目前.height(curHighest);
将所有他们是否在同一行或不元素到相同的高度。
感谢与此帮助。
设法与下面的代码段这方面的工作:
$.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);
};
我也加入到指定某个元素,使这得到高度的变化,而不是能力。
用法:
$('.equalheight').eqHeights();
$('.equalheight-frame').eqHeights({child:'.frame'});
最近,我不得不做同样的事情,这是我结束了:
$.fn.equalRowHeights = function() {
var count = this.length;
// set element's height auto so it doesn't mess up when the window resizes
this.height('auto');
for (var i = 0; i < count; ) {
// get offset of current element
var x = this.eq(i).offset().top;
// get elements in the same row
var $rowEls = this.filter(function() {
return $(this).offset().top === x;
});
// set the height elements in the same row
$rowEls.height(
Math.max.apply(null, $rowEls.map(function() {
return $(this).height();
}).get());
);
// set i to avoid unnecessary iterations
i = $rowEls.filter(':last').index() + 1;
}
var $this = this,
timer = 0;
// bind the resize event if it hasn't been added already
if (!$this.data('equalRowHeights')) {
$(window).on('resize.equalRowHeights', function(e) {
// add a buffer to prevent firing equalRowHeights() too much
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function() {
$this.equalRowHeights();
}, 50);
});
$this.data('equalRowHeights', true);
}
};
这里有一个小提琴
我把dclawson的出色答卷,并取得了一定的修改,以便它在其他情况下,尤其是嵌套元素是commen自举行。
$.fn.resEqHeight = function(options) {
var defaults = {
child: false
};
var options = $.extend(defaults, options);
var $el = $(this);
if ($el.length > 0) {
if(!$el.data('resEqHeight')) {
$(window).bind('resize.resEqHeight', function () {
$el.resEqHeight(options);
});
$el.data('resEqHeight', true);
}
} else {
console.log("No items found for resEqHeight.");
}
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() { $(this).data('resEqHeight.top', $(this).offset().top ); })
.each(function(index) {
var $el2 = $(this);
var thisTop = $el2.data('resEqHeight.top');
if (index > 0 && prevTop != thisTop) {
$(elements).height(max_height);
max_height = $el2.height();
elements = [];
}
max_height = Math.max(max_height, $el2.height());
prevTop = thisTop;
elements.push(this);
});
$(elements).height(max_height);
};
它可以用在相同的语法
$('.equalheight').resEqHeight();
$('.equalheight-frame').resEqHeight({child:'.frame'});