恐怕jQueryUI的sortable不适合完成这项任务。一个更好的选择是利用两者
Draggable
和
Droppable
jQueryUI小部件。
我正在附加一个工作代码片段。你必须改进行为,调整风格,放一些真正的内容(现在是随机内容)。
如果您需要使面板项也可排序,这也是可以实现的,尽管这需要更多的代码。
/* global $ */
$(function () {
var $mainSection = $('#main');
var $leftPanelTargets = $('#left-panel > .item-container');
var $rightPanelTargets = $('#right-panel > .item-container');
// Populate the leftPanel with sample items
$leftPanelTargets.each(function addItem(i, container) {
const $item = $('<div class="drag-item"></div>');
$item.append(`<h5 class="ui-widget-header">Title ${i + 1}</h5>`);
$item.append('<div class="sample-image"></div>');
$(container).append($item);
});
// Make all drag items draggable
$('.drag-item', $mainSection).draggable({
revert: 'invalid', // when not dropped, the item will revert back to its initial position
containment: 'document',
helper: 'clone',
cursor: 'move',
});
// Let the rightPanel containers (targets) be droppable, accepting items from the leftPanel
$rightPanelTargets.droppable({
accept: '#left-panel > .item-container > .drag-item',
drop: function (event, ui) {
dropImageRight(ui.draggable, event.target);
},
});
// Let the leftPanel containers be droppable as well, accepting items from the rightPanel
$leftPanelTargets.droppable({
accept: '#right-panel > .item-container > .drag-item',
drop: function (event, ui) {
dropImageLeft(ui.draggable, event.target);
},
});
// Move a draggable item from the leftPanel to the rightPanel
function dropImageRight($item, target) {
$item.fadeOut(function () {
$item.appendTo(target).fadeIn();
});
}
// Move a draggable item from the rightPanel to the leftPanel
function dropImageLeft($item, target) {
$item.fadeOut(function () {
$item.appendTo(target).fadeIn();
});
}
});
#main * {
box-sizing: border-box;
}
#left-panel {
float: left;
width: 250px;
}
#right-panel {
float: left;
width: 120px;
}
#left-panel h4,
#right-panel h4 {
line-height: 16px;
margin: 0 0 0.4em;
}
.item-container.ui-droppable-active:empty {
background: #efe7ff;
}
.item-container.ui-droppable-active.ui-droppable-hover:empty {
background: #d0bcfa;
}
.item-list > div {
width: 112px;
height: 112px;
padding: 0.4em;
margin: 0 0.4em 0.4em 0;
text-align: center;
}
.item-list > div h5 {
margin: 0 0 0.4em;
cursor: move;
}
.item-list > div img {
width: 100%;
cursor: move;
}
.item-container {
border: 1px solid #dddddd;
}
.sample-image {
width: 75px;
height: 75px;
margin: 0 auto;
background-repeat: no-repeat;
background-size: contain;
background-position-x: center;
background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzQiIGhlaWdodD0iNzQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGNpcmNsZSBjeD0iMzciIGN5PSIzNyIgcj0iMzciIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcikiLz4KICA8cGF0aCBkPSJNMzcuNTAwMyA1OEM0OS4zNzQ0IDU4IDU5IDQ4LjM3NDMgNTkgMzYuNVM0OS4zNzQ0IDE1IDM3LjUwMDMgMTVDMjUuNjI2MSAxNSAxNiAyNC42MjU3IDE2IDM2LjVjMCAuMTY3MS4wMDE5LjMzMzguMDA1Ny41SDE2djMwLjQ2NzJjMi43NDQgMS44OTUgNS43NTY2IDMuNDI4OCA4Ljk2OSA0LjUzMjhIMjVWNTMuOTk0OEMyOC41MjI1IDU2LjUxNjEgMzIuODM4MSA1OCAzNy41MDAzIDU4eiIgZmlsbD0iI2ZmZiIvPgogIDxwYXRoIGQ9Ik01MCAzNi41QzUwIDQzLjQwMzYgNDQuNDAzNyA0OSAzNy41MDAxIDQ5IDMwLjU5NjYgNDkgMjUgNDMuNDAzNiAyNSAzNi41UzMwLjU5NjYgMjQgMzcuNTAwMSAyNEM0NC40MDM3IDI0IDUwIDI5LjU5NjQgNTAgMzYuNXoiIGZpbGw9IiNGQ0I0MkYiLz4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjM3IiB5MT0iMCIgeDI9IjM3IiB5Mj0iNzQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0ZCQjMyRiIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii41MDQ3MzkiIHN0b3AtY29sb3I9IiNDMTE1MTEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQzExNDExIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KPC9zdmc+');
}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<section id="main" class="ui-widget ui-helper-clearfix">
<div id="left-panel" class="item-list">
<div class="item-container"></div>
<div class="item-container"></div>
<div class="item-container"></div>
<div class="item-container"></div>
</div>
<div id="right-panel" class="item-list">
<div class="item-container"></div>
<div class="item-container"></div>
<div class="item-container"></div>
<div class="item-container"></div>
</div>
</section>