Рассмотрим следующую скрипку: https://jsfiddle.net/Twisty/0r8v47yL/29/
JavaScript
$(function() {
$(".re-size").resizable({
grid: 50,
handles: "w",
maxHeight: 50,
minHeight: 50,
containment: "#container",
resize: function(e, ui) {
ui.position.top = 0;
ui.position.left = 0;
ui.size.height = 50;
}
});
});
Я добавил классы в ваши элементы DIV, чтобы их было проще назначать.Первое, что нужно знать о изменении размера на w
, это то, что оба элемента left
и width
будут скорректированы.Например, если у вас есть:
<div id="resizable2" class="ui-state-active re-size item">
<div class="ui-resizable-handle ui-resizable-w">
<span class="fas fa-cogs fa-fw"></span>
</div>
</div>
Это устанавливается в CSS на ширину 150px и высоту 50px, когда мы перетаскиваем указатель мыши, left
будет обновлен, чтобы сказать 45px
, а ширина будетизменено на 105px
.С точки зрения пользовательского интерфейса это то, что пользователь ожидает от действия, левая часть перемещается.Для вашего проекта это не очень хорошо работает.
Другая проблема, к которой это не относится, заключается в том, что расширение элемента становится более трудным.Вы можете посмотреть на event
и просмотреть движение мыши, чтобы увидеть, пытается ли пользователь переместить мышь ближе к левому краю.
Более полный пример: https://jsfiddle.net/Twisty/0r8v47yL/61/
HTML
<div class="scheduleWrapper">
<div id="canvasOverlay" style="position:absolute; width:600px !important; display:block; z-index:9999">
<div id="container" class="ui-widget-content">
<div id="resizable1" class="ui-state-active no-re-size item">
</div>
<div id="resizable2" class="ui-state-active re-size item">
<div class="ui-resizable-handle ui-resizable-w">
<span class="fas fa-cogs fa-fw"></span>
</div>
</div>
<div id="resizable3" class="ui-state-active re-size item">
<div class="ui-resizable-handle ui-resizable-w">
<span class="fas fa-cogs fa-fw"></span>
</div>
</div>
<div id="resizable4" class="ui-state-active re-size item">
<div class="ui-resizable-handle ui-resizable-w">
<span class="fas fa-cogs fa-fw"></span>
</div>
</div>
</div>
</div>
<canvas style="width: 600px; height: 300px;"></canvas>
</div>
JavaScript
$(function() {
$(".re-size").resizable({
handles: "w",
containment: "#container",
resize: function(e, ui) {
//console.log(e);
var x = e.originalEvent.originalEvent.movementX;
ui.position.top = 0;
ui.position.left = 0;
ui.size.height = 50;
if (x < 0) {
console.log(ui.size.width + Math.abs(x));
ui.element.width(ui.size.width + 50);
} else {
ui.size.width = ui.size.width - 50;
}
}
});
});
Надеюсь, это поможет.