@ Mac на правильном пути, но решение не завершено. Вы должны также установить содержание диалогового виджета Resizable . Если вы только установите Draggable, вы получите ограничение при перетаскивании, но когда вы захватите края и измените размер, вы все равно выйдете за пределы.
Итак, вы захотите сделать это, предполагая, что #mydialog
- это элемент, из которого вы изначально создали диалоговое окно, а #boundary
- это элемент, к которому вы хотите его ограничить (кстати, параметр контейнера также селектор):
let ui = $('#mydialog').closest('.ui-dialog'); // get parent frame
ui.draggable('option', 'containment', '#boundary'); // <-- drag, but not resize
ui.resizable('option', 'containment', '#boundary'); // <-- don't forget!!!
Вот пример фрагмента, переключающий флажки, чтобы переключать ограничение соответствующего виджета между 'document'
(по умолчанию) и '#area'
. Затем поэкспериментируйте с перетаскиванием диалогового окна за строку заголовка, и , изменив его размеры по краям. Обратите внимание, что происходит, когда вы выбираете только «Ограничить перетаскивание»:
// Create dialog from #win with mostly default options.
$('#win').dialog({
width: 200,
height: 150,
position: { my: 'center', at: 'center', of: '#area' }
});
// When checkbox changed, update confinement settings.
$('#draggable, #resizable').change(function () {
let d = $('#draggable').prop('checked');
let r = $('#resizable').prop('checked');
let ui = $('#win').closest('.ui-dialog');
ui.draggable('option', 'containment', d ? '#area' : 'document');
ui.resizable('option', 'containment', r ? '#area' : 'document');
});
#area {
position: relative;
left: 2ex;
top: 2ex;
width: 400px;
height: 300px;
border: 1px solid red;
}
#win {
font-size: 10pt;
display: flex;
flex-direction: column;
}
label {
display: flex;
align-items: center;
}
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
</head>
<body>
<div>Example</div>
<div id="area"></div>
<div id="win" title="test">
<label><input type="checkbox" id="draggable">Contain drag</label>
<label><input type="checkbox" id="resizable">Contain resize</label>
</div>
</body>