我有以下结构 http://img109.imageshack.us/img109/589/layoutwireframe.png
我需要调整大小来处理侧边栏上的% - 例如,如果我调整SidebarTop部分的大小,SidebarBottom部分也需要更新 - 增加的顶部将减少底部 - 反之。
我找到解决方案来重新调整相同的块,但这会增加两者。我需要的是如果增加其他减少。
谢谢!
答案 0 :(得分:3)
您可以通过修改jQuery用于实现alsoResize选项的代码来创建Reverse
resize,我们可以创建自己的alsoResizeReverse选项。然后我们可以简单地使用如下:
$("#resizable").resizable({
alsoResizeReverse: ".myframe"
});
添加alsoResizeReverse选项的代码:只需更改一些内容,例如明显重命名alsoResize到alsoResizeReverse并减去delta而不是添加它(使调整大小反转的原因)。原始的alsoResize代码从此版本的jQuery UI(来自Google CDN的1.8.1)的第2200行开始。
代码(这应该放在document.ready()之外):
$.ui.plugin.add("resizable", "alsoResizeReverse", {
start: function(event, ui) {
var self = $(this).data("resizable"), o = self.options;
var _store = function(exp) {
$(exp).each(function() {
$(this).data("resizable-alsoresize-reverse", {
width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10),
left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10)
});
});
};
if (typeof(o.alsoResizeReverse) == 'object' && !o.alsoResizeReverse.parentNode) {
if (o.alsoResizeReverse.length) { o.alsoResize = o.alsoResizeReverse[0]; _store(o.alsoResizeReverse); }
else { $.each(o.alsoResizeReverse, function(exp, c) { _store(exp); }); }
}else{
_store(o.alsoResizeReverse);
}
},
resize: function(event, ui){
var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
var delta = {
height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
},
_alsoResizeReverse = function(exp, c) {
$(exp).each(function() {
var el = $(this), start = $(this).data("resizable-alsoresize-reverse"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left'];
$.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
var sum = (start[prop]||0) - (delta[prop]||0); // subtracting instead of adding
if (sum && sum >= 0)
style[prop] = sum || null;
});
//Opera fixing relative position
if (/relative/.test(el.css('position')) && $.browser.opera) {
self._revertToRelativePosition = true;
el.css({ position: 'absolute', top: 'auto', left: 'auto' });
}
el.css(style);
});
};
if (typeof(o.alsoResizeReverse) == 'object' && !o.alsoResizeReverse.nodeType) {
$.each(o.alsoResizeReverse, function(exp, c) { _alsoResizeReverse(exp, c); });
}else{
_alsoResizeReverse(o.alsoResizeReverse);
}
},
stop: function(event, ui){
var self = $(this).data("resizable");
//Opera fixing relative position
if (self._revertToRelativePosition && $.browser.opera) {
self._revertToRelativePosition = false;
el.css({ position: 'relative' });
}
$(this).removeData("resizable-alsoresize-reverse");
}
});
答案 1 :(得分:2)
定义一个可以调整大小和可拖动的小DIV。
<div id="resizeDiv"></div>
现在只需在文档中添加以下jQuery代码。
$('#resizeDiv')
.draggable();
.resizable();
jQuery的优点在于我们可以简单地链接函数调用。首先我们调用.draggable()函数,使DIV可拖动,然后调用resizable()。 您可能希望在start / stop / resize事件上定义回调函数。为此,我们只需定义:
$('#resizeDiv')
.resizable({
start: function(e, ui) {
alert('resizing started');
},
resize: function(e, ui) {
},
stop: function(e, ui) {
alert('resizing stopped');
}
});
请注意,回调函数有两个参数。首先是事件对象,接下来是ui。 ui对象具有以下字段:
ui.helper - 包含帮助元素的jQuery对象
ui.originalPosition - {top,left}
ui.originalSize - {width,height}
ui.position - {top,left}当前位置
ui.size - {width,height}当前大小