jQuery 拖动到相对定位的可排序列表时,可拖动助手位置问题
jQuery Draggable helper position issue when dragging into relatively positioned Sortable list
我有一个可拖动列表,它通过 connectToSortable 连接到一个可排序列表,一切都按预期工作,但在 jQuery UI v1.11.2 更新后出现以下 2 个问题:
1) 在进入可排序列表时,可拖动助手相对于光标位置稍微重新定位。
2) 离开可排序列表(显然没有放入助手)时,可拖动助手相对于光标显着重新定位。
我一直在做一些测试,并找到了问题的原因。可排序列表是相对定位的。
助手总是附加到正文,但在 1.11.2 更新中,它附加到正文,但当您输入可排序时,它附加到可排序列表。
此项目需要相对定位的容器,因此无法移除相对定位。
HTML:
<div class="composer">
<ul>
<li id="draggable" class="ui-state-highlight">Drag me into sortable list and then back here </li>
</ul>
</div>
<div class="all-content-holder">
<div class="all-content-background">
<div class="all-content">
<ul id="sortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
</div>
</div>
</div>
JS
$("#draggable").draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$("#sortable").sortable({
revert: true
});
$("ul, li").disableSelection();
CSS
ul {
list-style-type: none;
margin: 0;
padding: 0;
margin-bottom: 10px;
}
li {
margin: 5px;
padding: 5px;
width: 150px;
}
.composer {
width:300px;
background-color:#ccc;
position: fixed;
top: 36px;
bottom: 0;
z-index: 9999999;
font-size:11px;
line-height: normal;
}
.all-content-holder {
height: 100%;
margin-left: 300px;
margin-top: 36px;
right: 0;
bottom: 0;
overflow: auto;
min-height: 100%;
}
.all-content-background {
margin: 0;
overflow-x: visible;
position: static;
width: 100%;
max-width: 100%;
}
.all-content {
position: relative;
width: 100%;
z-index: 1;
}
我创建了以下 JSFiddle 来重现该问题:
http://jsfiddle.net/bennyticklez/oLowzou6/1/
我试了很多修复都无济于事!如果有人能提供帮助,那就太好了。
提前致谢
原来这是jQuery UI Draggable 1.11.2 版本中专门引入的错误,并且在1.11.3 中也存在。
版本 1.11.4 之后的版本可以正常工作,因此将 jQuery UI 升级到此版本将解决问题。
我还发现在 1.11.2 版本的 jQuery UI 中使用 1.11.4 版本的 Draggable 解决了这个问题,并且没有导致我能找到的任何错误。
因此,如果您无法使用 1.11.2/1.11.3 版本的 jQuery(在过时的 CMS 等上),只需将 1.11.4 版本的 Draggable 放入,一切都应该正常运行。
希望对您有所帮助。
我有一个可拖动列表,它通过 connectToSortable 连接到一个可排序列表,一切都按预期工作,但在 jQuery UI v1.11.2 更新后出现以下 2 个问题:
1) 在进入可排序列表时,可拖动助手相对于光标位置稍微重新定位。
2) 离开可排序列表(显然没有放入助手)时,可拖动助手相对于光标显着重新定位。
我一直在做一些测试,并找到了问题的原因。可排序列表是相对定位的。
助手总是附加到正文,但在 1.11.2 更新中,它附加到正文,但当您输入可排序时,它附加到可排序列表。
此项目需要相对定位的容器,因此无法移除相对定位。
HTML:
<div class="composer">
<ul>
<li id="draggable" class="ui-state-highlight">Drag me into sortable list and then back here </li>
</ul>
</div>
<div class="all-content-holder">
<div class="all-content-background">
<div class="all-content">
<ul id="sortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
</div>
</div>
</div>
JS
$("#draggable").draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$("#sortable").sortable({
revert: true
});
$("ul, li").disableSelection();
CSS
ul {
list-style-type: none;
margin: 0;
padding: 0;
margin-bottom: 10px;
}
li {
margin: 5px;
padding: 5px;
width: 150px;
}
.composer {
width:300px;
background-color:#ccc;
position: fixed;
top: 36px;
bottom: 0;
z-index: 9999999;
font-size:11px;
line-height: normal;
}
.all-content-holder {
height: 100%;
margin-left: 300px;
margin-top: 36px;
right: 0;
bottom: 0;
overflow: auto;
min-height: 100%;
}
.all-content-background {
margin: 0;
overflow-x: visible;
position: static;
width: 100%;
max-width: 100%;
}
.all-content {
position: relative;
width: 100%;
z-index: 1;
}
我创建了以下 JSFiddle 来重现该问题: http://jsfiddle.net/bennyticklez/oLowzou6/1/
我试了很多修复都无济于事!如果有人能提供帮助,那就太好了。
提前致谢
原来这是jQuery UI Draggable 1.11.2 版本中专门引入的错误,并且在1.11.3 中也存在。
版本 1.11.4 之后的版本可以正常工作,因此将 jQuery UI 升级到此版本将解决问题。
我还发现在 1.11.2 版本的 jQuery UI 中使用 1.11.4 版本的 Draggable 解决了这个问题,并且没有导致我能找到的任何错误。 因此,如果您无法使用 1.11.2/1.11.3 版本的 jQuery(在过时的 CMS 等上),只需将 1.11.4 版本的 Draggable 放入,一切都应该正常运行。
希望对您有所帮助。