我试图在JQueryUI中动态地打开/关闭宽高比,但是即使将选项设置为false,它仍然保持宽高比。以下是我目前正在使用的代码:
$('#aspect_check').click( function() {
var ischecked = $('#aspect_check').prop('checked');
if (ischecked) {
$( "#resizable" ).resizable( "option", "aspectRatio", .75);
} else {
$( "#resizable" ).resizable( "option", "aspectRatio", false );
}
});
我发现了3年前的一个错误报告,看起来它仍然没有得到修复,尽管标记它至关重要。 http://bugs.jqueryui.com/ticket/4186
变通办法不适用于最新版本。有什么想法吗?
编辑:经过大量的错误报告后,这是一个解决方法:
$(function() {
$.extend($.ui.resizable.prototype, (function (orig) {
return {
_mouseStart: function (event) {
this._aspectRatio = !!(this.options.aspectRatio);
return(orig.call(this, event));
}
};
})($.ui.resizable.prototype["_mouseStart"]));
});
将其粘贴到您的javascript脚本部分。希望它可以帮助有类似问题的人!
答案 0 :(得分:10)
这对我来说没有修补
$('#resizable')
.resizable('option', 'aspectRatio', false)
.data('uiResizable')._aspectRatio = false;
这部分.data('uiResizable')._aspectRatio = false;
来救援
答案 1 :(得分:2)
我不知道它是否会起作用或将会发生什么。但你可以尝试这样的事情。
$(function(){
var settings = {
aspectRatio : .75
};
$("#tadaa").resizable(settings);
$("input").change(function(){
if($(this).is(":checked"))
{
$("#tadaa").resizable( "destroy" );
$("#tadaa").resizable();
}
else
{
$("#tadaa").resizable( "destroy" );
$("#tadaa").resizable(settings);
}
});
});
现场演示,目前只有底部可拖动元素被设计为使用,水平div没有样式。
答案 2 :(得分:2)
我意识到这是一个老帖子,但万一有人还需要答案,你可以这样做:
$('#aspect_check').click( function() {
var ischecked = $('#aspect_check').prop('checked');
if (ischecked) {
$( "#resizable" ).resizable({aspectRatio : .75});
} else {
$( "#resizable" ).resizable();
}
});
答案 3 :(得分:1)
另一个解决方案是在变量中保存可调整大小的选项,并使用更新的选项销毁和重新初始化小部件:
var options = $("#resizable").resizable("options");
if (ischecked) {
options.aspectRatio = .75;
} else {
options.aspectRatio = false;
}
$("#resizable").resizable("destroy");
$("#resizable").resizable(options);
答案 4 :(得分:0)
您可以在初始化后更改 aspectRatio
,如下所示。例如,如果您想更新边角 (true
) 调整大小的宽高比 ne, se, sw, nw
和边 (false
) 调整大小的 n, e, s, w
。
start: function (ui, event) {
let $this = $(this),
handle = $this.data('ui-resizable').axis;
$this.data('uiResizable')._aspectRatio = ($.inArray(handle, ['n', 'e', 's', 'w']) === -1);
},