Też potrzebowałem zrobić to samo i nie chciałem używać rozszerzenia interfejsu z eyecon.ro. Po pewnych badaniach znalazłem Combining Selectables And Draggables Using jQuery UI. Jest ładnie powiedziane, ale aby uruchamiać fragmenty kodu, musisz się w to zagłębić. Udało mi się sprawić, żeby działało. Lekko to zmieniłem, to jest mój sposób na zrobienie tego. Potrzebuje modyfikacji do wykorzystania na poziomie produkcji, ale mam nadzieję, że to pomaga.
// this creates the selected variable
// we are going to store the selected objects in here
var selected = $([]), offset = {top:0, left:0};
// initiate the selectable id to be recognized by UI
$("#selectable").selectable({
filter: 'div',
});
// declare draggable UI and what we are going to be doing on start
$("#selectable div").draggable({
start: function(ev, ui) {
selected = $(".ui-selected").each(function() {
var el = $(this);
el.data("offset", el.offset());
});
if(!$(this).hasClass("ui-selected")) $(this).addClass("ui-selected");
offset = $(this).offset();
},
drag: function(ev, ui) {
var dt = ui.position.top - offset.top, dl = ui.position.left - offset.left;
// take all the elements that are selected expect $("this"), which is the element being dragged and loop through each.
selected.not(this).each(function() {
// create the variable for we don't need to keep calling $("this")
// el = current element we are on
// off = what position was this element at when it was selected, before drag
var el = $(this), off = el.data("offset");
el.css({top: off.top + dt, left: off.left + dl});
});
}
});
Style CSS, aby móc zobaczyć, co się dzieje:
#selectable { width: 100%; height: 100%;}
#selectable div {
background: #ffc;
line-height: 25px;
height: 25px;
width: 200px;
border: 1px solid #fcc;
}
#selectable div.ui-selected {
background: #fcaf3e;
}
#selectable div.ui-selecting {
background: #8ae234;
}
HTML Markup:
<div id="selectable">
<div>item 1</div>
<div>item 2</div>
<div>item 3</div>
<div>item 4</div>
</div>
Kod w http://stackoverflow.com/questions/34698117/elements-became-andandly-non-resizable-after-dragging queston zawiera również odpowiedź na to pytanie Jednak kod w odpowiedziach powoduje losową utratę rozmiaru na przeciągnięcie – Andrus