奇怪的是它似乎与jquery-ui 10.4。不同之处在于,在 10.4 中可拖动的助手保留在其原始 div 中,并克隆到可排序中但隐藏。因此计算更容易进行。
在 11.4 中,helper附加到它所拖动的可排序对象上,这使得精确的偏移计算难以遵循。您必须经常更改父偏移量,并跟踪它在哪个可排序上、在哪个可排序上、可排序的位置等等。显然那里有一个错误。
一种简单的解决方案是获得连接到可排序从 10.4 开始的插件。您必须检查是否有不需要的副作用,但很快它似乎就起作用了。您可以使用不同的名称,以便保留原始名称。像这样:
$.ui.plugin.add("draggable", "connectToSortable104", {
// You take the whole connectToSortable plugin from
// here: https://code.jquery.com/ui/1.10.4/jquery-ui.js
// In 11.4 you'll need to add draggable parameter
// for example: to the event methods,
// start: function(event, ui, draggable)
...
See http://jsfiddle.net/gsnojkbc/2/ http://jsfiddle.net/gsnojkbc/2/
EDIT:
我不认为额外的 div 是导致问题的原因,这实际上是一个错误连接到可排序在导致问题的 jquery 11.4 中工作。允许在可排序的并且仍然跟踪正确的偏移量,每次助手更改 div 时,您都需要重新调整一些数据。它的完成方式有两个缺陷:
第一个是有一个刷新偏移量常见的方法是
其他事件在可拖动的。例如,当您单击
可拖动。因此它尝试根据以下内容计算偏移量
点击。但是打电话的时候刷新偏移量从可排序事件中,它
弄乱了点击偏移。这可以通过改变来解决刷新偏移量方法,以便不考虑事件.pageX和 Y。
像这样:
$.ui.draggable.prototype._refreshOffsetsSortable = function(event, draggable){
this.offset = {
top: this.positionAbs.top - this.margins.top,
left: this.positionAbs.left - this.margins.left,
scroll: false,
parent: this._getParentOffset(),
relative: this._getRelativeOffset()
};
this.offset.click = draggable.offset.click;
}
另一个问题的发生是因为你有很多可排序的。基本上
需要完成的另一个操作是更改父级
抵消。现在的做法是保存以前的
父母。通常情况下它可以工作,但如果你移动得太快,序列
使保存的父级成为sortable而不是原来的
父母。您可以通过在拖动开始时保存父级来解决此问题,其中
任何情况似乎都更有意义。像这样:
$.ui.plugin.add( "draggable", "connectToSortableFixed", {
start: function( event, ui, draggable ) {
var uiSortable = $.extend( {}, ui, {
item: draggable.element
});
draggable._parent = this.parent();
...
看这里:http://jsfiddle.net/24a8q49j/1/ http://jsfiddle.net/24a8q49j/1/