Jquery UI可排序,滚动(jsFiddle示例)

我想弄清楚当我拖动列表元素时如何让我的’可排序列表’滚动。

滚动在我拖动的列表中工作正常但不在我拖动的列表

http://jsfiddle.net/jordanbaucke/pacbC/1/

提出类似问题的另一个问题:

jQuery可排序容器滚动div与溢出auto

PS。 Pivotaltracker, www.pivotaltracker.com做得很好。

老问题,但是我今天花了几个小时挣扎,所以我想我会分享我学到的东西。

可排序滚动是scrollParent的偏移量,当前滚动位置,当前项目位置和scrollSensitivity的函数。 开始拖动时,sortable执行_mouseStart。 这将设置scrollParent并缓存当前排序的偏移量。 有了这些知识,我们可以在over事件处理程序中进行小规模的shuffle:

over: function (event, ui) { ui.item.data('sortableItem').scrollParent = ui.placeholder.parent(); ui.item.data('sortableItem').overflowOffset = ui.placeholder.parent().offset(); } 

当被拖动的元素更改容器时过度触发。 当你点击过度事件时,占位符已经移动到新容器。 代码获取新的scrollParent并重新获取偏移量。

为了简洁起见,我把Tats_innit的小提琴分开了: http : //jsfiddle.net/3E2Hg/84/

scrollParent在整个事件结构的其他地方被引用,所以我不确定这是否是防弹的。 不过,我认为这是一个很好的起点。 如果我遇到任何陷阱,我会更新这个答案。

工作演示 http://jsfiddle.net/3E2Hg/1/

如果我遗漏了任何内容,请告诉我,并且看看我之前的回复: 在拖动时自动滚动droppable div

行为 :现在你要拖动的div也会滚动。 (其余代码如下)

希望这可以帮助,

 $(function() { var sortlists = $("#List1, #List2").sortable({ tolerance: 'pointer', connectWith: '#List1, #List2', helper: 'original', scroll: true }).on('scroll', function() { sortlists.scrollTop($(this).scrollTop()); }); });​ 

你只需要添加overflow: auto; 到父元素,无论是ul还是#element ,还是有什么。