JQuery UI .sortable 在溢出底部移动li时跳转

JQuery UI .Sortable jumps when moving li at bottom of overflow

我查看了这个 JQueryUI .sortable li move 跳转的多个类似案例,但似乎没有任何相似之处。我有一个动态列表,它随着用户添加和删除项目而增长和缩小。如果它保持在顶部,它会平滑地移动项目。当您一直滚动到底部并移动列表项时,一旦我将其置于溢出状态,列表项就会跳转,就像它粘在列表底部一样。在某些情况下,您可能会完全丢失列表项,并且必须移动鼠标几次才能使其再次可见。我假设它与它所在容器的相对高度有关?

// find elements
$(document).ready(function() {
  $('.sortable_List').sortable({
    axis: 'y',
  });
});
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

.sortable_List {
  list-style-type: none;
}

.list_item {
  line-height: 40px;
  border: 1px solid black;
  background-color: white;
}

.container {
  overflow-y: scroll;
  height: 500px;
  overflow-x: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class='container'>
  <ul class='sortable_List'>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
    <li class='list_item'>This is a List Item</li>
  </ul>
</div>

我创建了一个 JSfiddle 作为示例:https://jsfiddle.net/Kradenko/8L47rc05/13/

提前致谢!

可排序列表在可滚动容器中排序时需要固定高度。

在 mousedown 函数中设置固定高度,然后在 sortable start 函数中将高度重置为自动。

这是更新后的 fiddle

// find elements
$(document).ready(function() {

  $('.sortable_List').mousedown(function() {
    $(this).height($(this).height());
  }).sortable({
    axis: 'y',    
    start: function(event, ui) {
        $(this).height('auto');
    }
  });

});

我不太明白为什么会这样,但我知道要确保css正常工作,有时您需要在元素上设置固定高度而不是自动高度,所以这样想。