我使用jQuery UI Resizable并编写了自定义函数来处理三个可调整大小的元素以及它们的子元素。
由于使用了边框和边距来创建白色边框,我的解决方案也必须解决这个问题。只处理没有边界的元素要简单得多。我还必须计算零高度元素并调整它们的大小以使它们可见,同时仍然保持零值,因为它们的百分比用于计算。
如果您需要更多详细信息,您可以深入研究完整的代码,但我已经精简到您在这个 jsfiddle 上遇到的问题所需的基本要素。
jQuery 代码如下,使用我原来的选择器——在示例中它会有意义,其中包括必要的 CSS 和标记结构。
$('#act .weighting-category').resizable({
minHeight: 0,
handles: 's',
start: function(event, ui) {
orig_height = $(this).height();
actheight1 = $('#activity').height();
basic_o_percent = $('#act .basic').height() / (actheight1-$(this).height());
class_o_percent = $('#act .classifications').height() / (actheight1-$(this).height());
related_o_percent = $('#act .related').height() / (actheight1-$(this).height());
financial_o_percent = $('#act .financial').height() / (actheight1-$(this).height());
performance_o_percent = $('#act .performance').height() / (actheight1-$(this).height());
},
resize: function(event, ui) {
if($(this).hasClass('zero') && $(this).height() > 5){
$(this).removeClass('zero');
}
if(!$(this).hasClass('zero')){
if($(this).height() > orig_height || orig_height < (actheight1)) {
if($(this).attr('id')=='basic'){
$("#act .classifications").height( (actheight1 -$(this).height()) * class_o_percent);
$("#act .financial").height( (actheight1 -$(this).height()) * financial_o_percent);
$("#act .related").height( (actheight1 -$(this).height()) * related_o_percent);
$("#act .performance").height( (actheight1 -$(this).height()) * performance_o_percent);
} else if( $(this).attr('id')=='classifications'){
$("#act .basic").height( (actheight1 -$(this).height()) * basic_o_percent);
$("#act .financial").height( (actheight1 -$(this).height()) * financial_o_percent);
$("#act .related").height( (actheight1 -$(this).height()) * related_o_percent);
$("#act .performance").height( (actheight1 -$(this).height()) * performance_o_percent);
} else if( $(this).attr('id')=='financial'){
$("#act .classifications").height( (actheight1 -$(this).height()) * class_o_percent);
$("#act .basic").height( (actheight1 -$(this).height()) * basic_o_percent);
$("#act .related").height( (actheight1 -$(this).height()) * related_o_percent);
$("#act .performance").height( (actheight1 -$(this).height()) * performance_o_percent);
} else if( $(this).attr('id')=='related'){
$("#act .classifications").height( (actheight1 -$(this).height()) * class_o_percent);
$("#act .financial").height( (actheight1 -$(this).height()) * financial_o_percent);
$("#act .basic").height( (actheight1 -$(this).height()) * basic_o_percent);
$("#act .performance").height( (actheight1 -$(this).height()) * performance_o_percent);
} else if( $(this).attr('id')=='performance'){
$("#act .classifications").height( (actheight1 -$(this).height()) * class_o_percent);
$("#act .financial").height( (actheight1 -$(this).height()) * financial_o_percent);
$("#act .related").height( (actheight1 -$(this).height() ) * related_o_percent);
$("#act .basic").height( (actheight1 -$(this).height()) * basic_o_percent);
}
} else {
targetheight = $(this).height();
$('#act .weighting-category').not(this).each(function(){
$(this).height( (actheight2 - targetheight ) * 0.25);
if($(this).hasClass('zero') && $(this).height() > 0){
$(this).removeClass('zero');
}
})
}
}
},
stop: function(event, ui) {
if($(this).height() == 0){
$(this).addClass('zero');
}
totalheight = 0;
$('#act > .weighting-category').each(function() {
if(!$(this).hasClass('zero'))
{
totalheight += $(this).height();
}
});
actheight = 0;
$('#act .weighting-category').each(function(){
if(!$(this).hasClass('zero')){
actheight += $(this).height();
}
})
actheight = 0;
$('#act .weighting-category').each(function(){
if(!$(this).hasClass('zero')){
actheight += $(this).height();
}
if($(this).height() == 0 || $(this).hasClass('zero')){
$(this).addClass('zero');
}
})
if($(this).height() >= actheight1)
{
$(this).animate({
height: (actheight1),
}, 500, function() {
});
}
$('#act .weighting-category').each(function(){
if(!$(this).hasClass('zero')){
thispercentage = $(this).height() / actheight;
$(this).animate({
height: (maxheight * thispercentage),
}, 500, function() {
});
}
})
}
});
让我知道事情的后续。
[编辑]:目前这在 IE 11 上不起作用,但是我原来的解决方案可以。它可能只需要对 IE 进行一些故障排除,但适用于 Chrome 和 Firefox 最新版本。