【问题标题】:Jquery UI Sortable, Scrolling (jsFiddle Example)Jquery UI 可排序、滚动(jsFiddle 示例)
【发布时间】:2012-06-14 01:10:11
【问题描述】:

我试图弄清楚如何在拖动列表元素时让“可排序列表”滚动。

滚动在我拖动 from 的列表中工作正常,但在我拖动 to 的列表中不能正常工作。

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

另一个类似问题的问题:

jQuery sortable container scroll div with overflow auto

附言。 Pivotaltracker,www.pivotaltracker.com 做得很好。

【问题讨论】:

    标签: jquery css jquery-ui overflow jquery-ui-sortable


    【解决方案1】:

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

    可排序滚动是scrollParent 的偏移量、当前滚动位置、当前项目位置和滚动灵敏度的函数。当您开始拖动时,可排序对象会执行 _mouseStart。这将设置 scrollParent 并缓存其当前排序的偏移量。有了这些知识,我们可以在 over 事件处理程序中做一个小的洗牌:

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

    当拖动的元素更改容器时触发 Over。当您点击 over 事件时,占位符已经移动到新容器中。代码获取新的 scrollParent 并重新缓存偏移量。

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

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

    【讨论】:

    • 我爱你。对于一个可能非常棘手的问题,这是一个非常干净的解决方案。我还没有遇到任何问题,它对我来说开箱即用!如果我发现任何奇怪的东西会更新。
    • 漂亮的解决方案——节省了我的工作时间,谢谢!
    • @tedwards1988 太棒了,很高兴能帮上忙!
    【解决方案2】:

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

    如果我遗漏了什么,请告诉我,并慢慢查看我之前的回复:Automatically scroll droppable div whilst dragging

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

    希望这会有所帮助,

    代码

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

    【讨论】:

    • 将项目 1 和 3 放在第二个滚动框中。然后,将两个滚动条设置为高。现在您不能从第一个滚动框中拖动项目 2 并将其放在第二个滚动框的 8/9 之间,因为滚动条的高度不同。也许解决方案是将滚动框1中的高度临时设置为大于滚动框2的长度。
    • 嗨@arttronics 怎么样? :) 是的,因为on 甚至绑定到this 对象,即当列表变得不相等时用户从其中拖动的 div solution 可以是:将其拖动到 div 然后滚动它到bottm或可能玩this对象并总是选择更大的容器作为滚动参考,尽管为评论欢呼。
    • 太糟糕了,这是一个无法运行的演示,正如您昨天提供的许多用户提供的另一个 SO Answer 中所报告的那样。 -1 表示没有用的答案。
    • @Tats_innit 这并不能解决问题。我仍然无法使用启动列表中的元素滚动到连接列表的底部。将scrollTop() 调用绑定到悬停时的this 元素可能会使接收列表稍微居中,但不允许进一步拖动!
    • @Tats_innit 我刚刚在windows的所有浏览器都试过了,不行,看截图screencast.com/t/cCqm8i4h
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多