Во-первых, я бы СИЛЬНО посоветовал перейти на более новую библиотеку пользовательского интерфейса jQuery. Я обнаружил много странных проблем с выбранным в вашей скрипке jQuery UI 1.8.18.
Одна из вещей, которые я обнаружил, заключалась в том, что он игнорировал options
, примененный к изменяемым размерам. Если вы прочитаете эту статью , она говорит о том, как установить эту опцию. Перейдите к началу ответа Джейсона С. Так вот, с чего я начал:
JavaScript
$(function() {
$("#dialog").dialog({
autoOpen: true,
modal: false,
resizable: false,
draggable: true,
closeOnEscape: true,
title: "Title",
open: function() {
$('.ui-widget-overlay').bind('click', function() {
$('#dialog').dialog('close');
})
}
});
var ui = $("#dialog").closest(".ui-dialog");
ui.draggable("option", "containment", '#dialog-container');
ui.resizable("option", "containment", '#dialog-container');
});
Это не сработало. Перетаскиваемое удержание сработало, но изменение размера удержания не удалось. Я виню 1.8.18. Я мог бы проверить это снова с современным 1.12.1, просто чтобы увидеть.
Это не означает, что вы не можете использовать 1.8.18, если вы не можете изменить свою библиотеку, вот обходной путь. Здесь есть предостережения.
Рабочий пример: https://jsfiddle.net/Twisty/2vaf3dr5/39/
JavaScript
$(function() {
$("#dialog").dialog({
autoOpen: true,
modal: false,
resizable: false,
draggable: true,
closeOnEscape: true,
title: "Title",
open: function() {
$('.ui-widget-overlay').bind('click', function() {
$('#dialog').dialog('close');
})
}
});
var ui = $("#dialog").closest(".ui-dialog");
ui.draggable("option", "containment", '#dialog-container');
ui.resizable({
handles: "n, e, s, w, se",
minHeight: 150,
minWidth: 150,
resize: function(e, ui) {
var contPos = $("#dialog-container").position();
contPos.bottom = contPos.top + $("#dialog-container").height();
contPos.right = contPos.left + $("#dialog-container").width();
contPos.height = $("#dialog-container").height();
contPos.width = $("#dialog-container").width();
if (ui.position.top <= contPos.top) {
ui.position.top = contPos.top + 1;
}
if (ui.position.left <= contPos.left) {
ui.position.left = contPos.left + 1;
}
if (ui.size.height >= contPos.height) {
ui.size.height = contPos.height - 7;
}
if (ui.size.width >= contPos.width) {
ui.size.width = contPos.width - 7;
}
}
});
});
Я убрал предварительно настроенную опцию изменения размера в диалоге и выписал опции напрямую. Опять же, сдерживание здесь не сработало, поэтому мне пришлось сделать свою собственную логику изменения размера. В конце концов, это то, что вы ожидаете.
Одна из странностей или предостережений заключается в том, что он читает движение мыши и будет продолжать это делать, даже если мышь превысила границы. Так что верх и левая остановка ... но ширина и высота продолжают расти. Я не знаю почему, и вы знаете, куда я укажу палец.
Я попытался переключить ваши библиотеки, и изменение размера ... немного лучше. Все еще странно с высотой, но не с шириной. Смотрите здесь: https://jsfiddle.net/Twisty/2vaf3dr5/44/
Это должно помочь вам, надеюсь, это поможет.