我正在两个容器之间进行拖放,当容器中至少存在一个元素时,它正常工作。但是当我丢弃其中任何一个元素并试图将它们放回去时,它就无法正常工作。
HTML: -
<div class="portlet-body ui-sortable" id="sortable_portlets">
<div class="sortable row-fluid pull-left packlistWrap excersissestoaddtopac">First DIV
<div class="portlet portlet-sortable light bordered packlistupdate packlist" tag-id="2" video-id="4">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG A</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
</div>
<hr>
<hr>
<hr>
<hr>
<div class="mid-title"><span class="caption-subject font-green sbold uppercase ">SECOND DIV</span></div>
<div id="excersisesinpac">
<div class="portlet portlet-sortable light bordered packlist" video-id="2">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG B</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
<div class="portlet portlet-sortable light bordered packlistupdate packlist" tag-id="2" video-id="4">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG A</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
</div>
</div>
JavaScript的: -
var PortletDraggable = function () {
return {
//main function to initiate the module
init: function () {
if (!jQuery().sortable) {
return;
}
$("#sortable_portlets").sortable({
connectWith: ".portlet",
items: ".portlet",
opacity: 0.8,
handle : '.portlet-title',
coneHelperSize: true,
placeholder: 'portlet-sortable-placeholder',
forcePlaceholderSize: true,
tolerance: "pointer",
helper: "clone",
tolerance: "pointer",
forcePlaceholderSize: !0,
helper: "clone",
cancel: ".portlet-sortable-empty, .portlet-fullscreen", // cancel dragging if portlet is in fullscreen mode
revert: 250, // animation in milliseconds
update: function(b, c) {
if (c.item.prev().hasClass("portlet-sortable-empty")) {
c.item.prev().before(c.item);
}
},
stop: function(event, ui) {
}
});
}
};
}();
jQuery(document).ready(function() {
PortletDraggable.init();
});
答案 0 :(得分:2)
在sortable()方法中使用
dropOnEmpty:true,
答案 1 :(得分:2)
您可以如下更改代码。您将得到想要的结果。
我刚刚添加了两个类类型选择器.packlistWrap
和.mid-title
。我还更改了connectWith
。
$("#sortable_portlets")
=> $(".packlistWrap, .mid-title, #sortable_portlets")
connectWith: ".packlistWrap, .mid-title",
其他代码相同。
$(".packlistWrap, .mid-title, #sortable_portlets").sortable({
connectWith: ".packlistWrap, .mid-title, .portlet",
dropOnEmpty: true,
items: ".portlet",
opacity: 0.8,
handle: '.portlet-title',
coneHelperSize: true,
placeholder: 'portlet-sortable-placeholder',
forcePlaceholderSize: true,
tolerance: "pointer",
helper: "clone",
tolerance: "pointer",
forcePlaceholderSize: !0,
helper: "clone",
cancel: ".portlet-sortable-empty, .portlet-fullscreen", // cancel dragging if portlet is in fullscreen mode
revert: 250, // animation in milliseconds
update: function(b, c) {
if (c.item.prev().hasClass("portlet-sortable-empty")) {
c.item.prev().before(c.item);
}
},
stop: function(event, ui) {}
});
答案 2 :(得分:1)
在您的代码中,$("#sortable_portlets").sortable(...)
定位到单个元素。您需要定位两个单独的可排序容器,在您的情况下分别为#excersisesinpac
和.excersissestoaddtopac
。在下面的示例中,请注意,我已经将类sortable
添加到了#exercisesinpac
(因为您已经在.excersissestoaddtopac
元素上有了这个类)。然后,我修改了对$.sortable
的调用,以使其以.sortable
类$("#sortable_portlets .sortable").sortable(...)
为目标的两个元素。
var PortletDraggable = function() {
return {
//main function to initiate the module
init: function() {
if (!jQuery().sortable) {
return;
}
$("#sortable_portlets .sortable").sortable({
connectWith: ".sortable",
items: ".portlet",
opacity: 0.8,
handle: '.portlet-title',
coneHelperSize: true,
placeholder: 'portlet-sortable-placeholder',
forcePlaceholderSize: true,
tolerance: "pointer",
helper: "clone",
tolerance: "pointer",
forcePlaceholderSize: !0,
helper: "clone",
cancel: ".portlet-sortable-empty, .portlet-fullscreen", // cancel dragging if portlet is in fullscreen mode
revert: 250, // animation in milliseconds
update: function(b, c) {
if (c.item.prev().hasClass("portlet-sortable-empty")) {
c.item.prev().before(c.item);
}
},
stop: function(event, ui) {
}
});
}
};
}();
jQuery(document).ready(function() {
PortletDraggable.init();
});
body {
padding: 1.25em;
}
div {
position: relative;
}
.wire {
position: relative;
margin: 1.25em;
padding: 1.25em;
border: 1px solid;
}
.wire::before {
padding: 0 1em;
}
.wire::before {
position: absolute;
top: -1.25em;
left: 0;
padding: 0 1em;
color: white;
}
#sortable_portlets::before {
content: "#sortable_portlets";
background-color: #B683C3;
}
.sortable::before {
content: ".sortable";
background-color: #6373B6;
}
.portlet {
min-width: 100px;
}
.portlet::before {
content: ".portlet";
background-color: #E06D10;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<div class="portlet-body ui-sortable wire" id="sortable_portlets">
<div class="sortable row-fluid packlistWrap excersissestoaddtopac wire">
<div class="portlet portlet-sortable light bordered packlistupdate packlist wire" tag-id="2" video-id="4">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG A</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
</div>
<div id="excersisesinpac" class="sortable wire">
<div class="portlet portlet-sortable light bordered packlist wire" video-id="2">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG B</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
<div class="portlet portlet-sortable light bordered packlistupdate packlist wire" tag-id="2" video-id="4">
<div class="portlet-title">
<div class="row">
<div class="col-md-6"><span>TAG A</span></div>
<div class="col-md-6"><span></span></div>
</div>
</div>
</div>
</div>
</div>