Jquery ui jQuery UI Resizeable在resize事件中停止调整大小
使用jQueryUIResizeable,我试图防止基于各种规则调整大小。内置的包容功能似乎无法与绝对定位的元素正常工作,无论如何,我需要更灵活的东西 有这样的东西:Jquery ui jQuery UI Resizeable在resize事件中停止调整大小,jquery-ui,resize,jquery-ui-resizable,Jquery Ui,Resize,Jquery Ui Resizable,使用jQueryUIResizeable,我试图防止基于各种规则调整大小。内置的包容功能似乎无法与绝对定位的元素正常工作,无论如何,我需要更灵活的东西 有这样的东西: $( ".selector" ).resizable({ resize : function(event, ui) { /* ??? */ } }); 如何告知“ui”对象以防止调整大小 谢谢。当前版本似乎不可能。我想您可以这样做: $(Selector).css("min-hight", Size); $(
$( ".selector" ).resizable({ resize : function(event, ui) { /* ??? */ } });
如何告知“ui”对象以防止调整大小
谢谢。当前版本似乎不可能。我想您可以这样做:
$(Selector).css("min-hight", Size);
$(Selector).css("max-hight", Size);
这很简单,看看这段代码,它是一个可调整大小的浮动“left”div列,具有固定的宽度和相互的限制
var maxWidthOffset, total2Width;
$('#'+this.id).find('ul:not(:last)').resizable({
handles: 'e',
ghost: true,
delay: 200,
helper: "overmoused",
minWidth: 20,
start: function(e, ui) {
maxWidthOffset = ui.element.next().width()-20;
total2Width = ui.element.width()+maxWidthOffset+20;
},
resize: function(e, ui) {
if (ui.size.width > (ui.originalSize.width + maxWidthOffset)) {
$(this).resizable('widget').trigger('mouseup');
}
},
stop: function(e, ui) {
var w;
if (ui.originalSize.width > ui.size.width) {
w = ui.element.next().width()+ui.originalSize.width - ui.size.width;
ui.element.next().width(w>20 ? w : 20);
} else {
w = ui.element.next().width()-(ui.size.width - ui.originalSize.width);
ui.element.next().width(w>20 ? w : 20);
}
ui.element.width(total2Width-ui.element.next().width());
}
});
只需在resize事件中直接设置UI属性。(如果愿意,您也可以在停止事件中执行此操作): 当然,你也可以在定位上做同样的事情
请参阅此提琴:此版本没有停止调整大小的标准选项。 您可以禁用“可调整大小”选项,但它将继续调整大小,并仅在下次尝试时停止调整大小选项
$(".selector").resizable("disable");
无论如何,我发现可以直接从Resize事件使用maxWidth和maxHeight属性来限制大小调整
$(".selector").resizable({
aspectRatio: true,
handles: 'all',
resize: function( event, ui ){
if(x > y){
(".selector").resizable("option","maxWidth",ui.size.width);
return;
}
}
});
您选择的正确答案并非完全正确。这是可以实现的: 使用无用的帮助器停止在调整大小事件中发生的调整大小操作:
$( ".selector" ).resizable({
resize: function(event, ui) {
// resize $(this) as you wish
},
helper: $("</div>")
});
$(“.selector”)。可调整大小({
调整大小:函数(事件,ui){
//根据需要调整$(此)的大小
},
助手:$(“”)
});
在“调整大小”事件中,根据需要更改可调整大小的尺寸和位置。停止事件仍有问题。就在停止事件被触发之前,jquery调整了元素的大小——这是您不想要的。您所能做的就是将对象状态重置为上次触发调整大小事件时的状态。因此,在停止事件中,您可以重置可调整大小的尺寸和位置,因为它们是您在上次触发的“调整大小”事件中设置的。为此,您需要在更高的上下文中声明一些变量,或者使用jquery的element.data()方法—您可以选择(如果您觉得更方便的话,您甚至可以创建整个对象的不可见克隆)。下面是最终代码结构的概述:
$( ".selector" ).resizable({
resize: function(event, ui) {
// resize $(this) as you wish and then save the dimensions and positions to some variables declared in a higher context
},
helper: $("</div>"),
stop: function(){
// restore $(this) position and location as it was last set in the resize event
}
});
$(“.selector”)。可调整大小({
调整大小:函数(事件,ui){
//根据需要调整$(此项),然后将尺寸和位置保存到更高上下文中声明的某些变量
},
助手:$(“”),
停止:函数(){
//将$(此)位置和位置还原为上次在调整大小事件中设置的位置
}
});
已经很久了,但是如果有人读到这篇文章,这个问题有一个解决方案
您只需在resize
内设置maxWidth
或minWidth
(取决于您要执行的操作)即可阻止其调整大小
您可以执行以下操作:
minWidth: 300,
start: function(event, ui) {
// get it once so we don't get it hundreds of time inside resize
this.enforcedMinWidth = $(this).resizable("option", "minWidth");
},
resize: function(event, ui) {
// use whatever conditions you want to stop here
// in my original case, i was checking its width vs neighbor and
// stops the resizing accordingly, so change it to fit your case
if (ui.element.next().width() <= this.enforcedMinWidth) {
$(this).resizable("option", "maxWidth", ui.size.width);
}
},
stop: function(event, ui) {
// reset
$(this).resizable("option", "maxWidth", null);
// cleanup
delete this.enforcedMinWidth;
}
minWidth:300,
开始:功能(事件、用户界面){
//拿一次,这样我们就不会在里面拿几百次了
this.enforcedMinWidth=$(this);
},
调整大小:函数(事件、ui){
//使用任何你想停在这里的条件
//在我最初的例子中,我检查了它的宽度和邻居的距离
//停止相应的大小调整,因此更改它以适合您的情况
如果(ui.element.next().width(),有一种笨拙的方法,即拦截start
和resize
:
resize: function(event, ui) {
if (RULE) {
$(this).resizable('widget').trigger('mouseup');
var save = window.savePosition;
save.width += 4;
save.height += 4;
$(ui.helper).css(save);
return;
}
},
start: function(event, ui) {
if (RULE) {
window.savePosition = $.extend({ }, ui.size, ui.position);
}
}
不幸的是,在调整大小手柄上有一个4像素的“边框”,因此您必须应用轻微的校正,以避免在中止调整大小操作时可调整大小的区域“跳过”
此解决方案会将保存还原到初始位置,前提是始终应用相同的规则。当然,您可以通过不保存初始位置和大小,而是在调整大小过程中动态重新计算来进行调整。在这种情况下,您根本不需要截取开始
。如果您不需要继续鼠标向下状态,您可以uld刚刚触发鼠标:
var resizableSettings = {
start: function(event, element) {
if (a > b) {
$(this).trigger('mouseup');
}
}
};
但是您可能需要继续mousedown状态,例如用户拖动div
下面是一个使用前面提到的一些想法的示例
var resizableSettings = {
start: function(event, element) {
if (a > b) {
$(this).resizable('option', {
'maxWidth': element.size.width,
'minWidth': element.size.width,
'maxHeight': element.size.height,
'minHeight': element.size.height
});
return;
}
$(this).resizable('option', {
'maxWidth': false,
'minWidth': false,
'maxHeight': false,
'minHeight': false
});
}
};
你能解决这个问题吗?我在DOM中也遇到了问题。我将包含的元素设置为相对位置。这是根据各种规则停止调整大小的最正确答案。尽管我会在调整大小事件中使用$(this),而不是$('.selector'))肯定是要走的路,而且比Alexey的回答更简单/更干净你的回答正是我想知道的:“如何在调整大小时设置大小?”。谢谢,帮我省去了一些麻烦。是的,mouseup工作得很好。我不明白为什么jqueryui团队不向api添加如此有用的功能。在使用jqueryui时,我总是需要破解一些东西。mouseup可以工作,但如果用户在mousedown状态下尝试执行其他操作(例如拖动div),mouseup将不会有用。
var resizableSettings = {
start: function(event, element) {
if (a > b) {
$(this).resizable('option', {
'maxWidth': element.size.width,
'minWidth': element.size.width,
'maxHeight': element.size.height,
'minHeight': element.size.height
});
return;
}
$(this).resizable('option', {
'maxWidth': false,
'minWidth': false,
'maxHeight': false,
'minHeight': false
});
}
};