你只是在平衡一行上存在的列的高度,所以你可以用这个替换所有的 JS
$.fn.extend({
equalHeights: function(options){
var ah=(Math.max.apply(null, $(this).map(function(){ return $(this).height(); }).get()));
if (typeof ah=='number') $(this).height(ah);
}
});
并像这样执行
$(document).ready(function() {
$(window).resize(function() {
$('.equalize').equalHeights();
}).trigger('resize'); // don't write code twice just to execute on page load - trigger the event you just bound to instead
})
但是如果你想按照伪行 工作演示来做
<ul class="eqme">
<li><h1>One</h1></li>
<li><h2>Two</h2></li>
....
</ul>
JS
$.fn.extend({
equalHeights: function(){
var top=0;
var classname=('equalHeights'+Math.random()).replace('.','');
$(this).each(function(){
if ($(this).is(':visible')){
var thistop=$(this).offset().top;
if (thistop>top) {
$('.'+classname).removeClass(classname);
top=thistop;
}
$(this).addClass(classname);
$(this).height('auto');
var h=(Math.max.apply(null, $('.'+classname).map(function(){ return $(this).outerHeight(); }).get()));
$('.'+classname).height(h);
}
}).removeClass(classname);
}
});
$(function(){
$(window).resize(function(){
$('.eqme li').equalHeights();
}).trigger('resize');
});
这甚至会处理许多属于同一父级的子级的元素,即使它们破坏了行,例如当一行中只有 10 个元素时ul
包含 100 个li
元素,或者当li
宽度是静态的但页面宽度不是时,在调整大小时当窗口缩小时,它们会清除到新行(或者如果扩大宽度,它们会浮动回到上面的行),然后它们的高度将固定以适应每个伪行的最高值。
笔记:
反馈表明,这outerHeight()
比.height()
在某些情况下效果更好。
在生产中,在 window.resize 函数中,我添加了一个 100 毫秒的 clearTimeout 和 setTimeout,然后再对大小的变化做出反应,以防止通过拖动角来调整大小时变慢。