看起来问题是由droppable 的容差选项引起的;它的默认值为intersect
.
如 API 文档中所述
intersect
: Draggable 在两个方向上至少与 droppable 重叠 50%。
看看您<li>
的 s 如何仍处于默认样式,它们将填充其 parent 的可用宽度<ul>
,如果您尝试将它们拖到表格的右侧,超过 50% 的<li>
将悬挂在可放置对象之外。
<li>
通过为您的 s添加一些边框,#myListOfData
您可以更好地了解正在发生的事情。
图1
所以现在我们知道了问题所在,接下来就是解决方案了。
正如Pepper所说,您可以将 droppable 的容差选项更改为指针:
工作示例 1
$('#table').droppable({
tolerance: 'pointer', //Important Bit
over: function (event, ui) {
$('#tableOverlay').width($(this).width());
$('#tableOverlay').height($(this).height());
$('#tableOverlay').show();
$("#tableOverlay").position({
of: this,
at: "top left",
my: "top left"
});
},
out: function (event, ui) {
$('#tableOverlay').hide();
},
drop: function (event, ui) {
$('#tableOverlay').hide();
}
});
或者你可以tolerance option: 'touch'
像这样使用:
工作示例 2
$('#table').droppable({
tolerance: 'touch', //Important Bit
over: function (event, ui) {
$('#tableOverlay').width($(this).width());
$('#tableOverlay').height($(this).height());
$('#tableOverlay').show();
$("#tableOverlay").position({
of: this,
at: "top left",
my: "top left"
});
},
out: function (event, ui) {
$('#tableOverlay').hide();
},
drop: function (event, ui) {
$('#tableOverlay').hide();
}
});
或者您可以为您的 s 指定一个宽度,<li>
如下所示:
工作示例 3
#myListOfData li {
width: 100px;
}
或者,如果您不想更改公差选项或指定宽度,您可以
display: table;
像这样使用:
工作示例 4
#myListOfData li {
display: table;
}