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
,还是有什么。