【问题标题】:jQuery UI Sortable: Scroll entire page as well as containerjQuery UI Sortable:滚动整个页面以及容器
【发布时间】:2012-01-20 16:34:30
【问题描述】:

我有两个元素列表,并且我已启用 jQuery UI 可对它们进行排序。我使用connectWith 选项使我能够在两个列表之间拖动。

一个列表中有很多元素,所以我在其中添加了overflow-y: scroll,但是当我尝试从该列表中抓取一个元素并将其拖动到另一个列表时,它只会滚动列表,而不是整个页面.

我做了一个 jsFiddle 演示 (http://jsfiddle.net/MCcuc/)。向下滚动,并尝试将Item Q(通过框顶部的灰色条拖动)从红色列表移动到绿色列表中。您会看到红色列表滚动,但页面没有滚动。如何滚动整个页面以及列表?

我只是启用sortable,没有太多选项:

$('.sort').sortable({
    connectWith: '.sort',
    handle: '.handle'
});

【问题讨论】:

  • 我认为这与第二个列表可滚动有关。请注意,如果您开始并将第一个列表拖到第二个列表中,它会像您想要的那样滚动页面。

标签: javascript jquery jquery-ui


【解决方案1】:

这确实与可滚动溢出冲突。在这种情况下,可拖动的辅助元素被限制在其父元素上,可能是因为试图“离开”父元素只会扩大其可滚动区域。

一种解决方法是传递一个helper 函数,该函数克隆拖动的元素并将其重新设置在页面正文下。这样一来,可拖动的辅助元素将从一开始就位于其原始父级之外,因此将滚动整个页面:

$(".sort").sortable({
    connectWith: ".sort",
    handle: ".handle",
    helper: function(event, element) {
        return element.clone().appendTo("body");
    }
});

你会发现一个更新的小提琴演示了这个here

【讨论】:

  • 酷,这似乎有效。不过我发现了一个奇怪的错误。如果您尝试拖动到绿色列表的末尾,它会跳回红色列表。如果你把它放在其他任何地方,它就可以工作。
  • 确实如此。显然,这两个 sortable 正在竞争成为 drop 目标,并且与 helper 的距离看起来像是决定因素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多