jQuery UI 拖放

Posted

技术标签:

【中文标题】jQuery UI 拖放【英文标题】:jQuery UI Drag & Drop 【发布时间】:2010-12-27 08:52:40 【问题描述】:

我尝试使用此处发布的解决方案:jQuery Draggable and overflow issue,但我似乎无法让它为自己工作。我有一个容器 div (div#container),它包裹着我所有的可拖动 div。 div#container 的溢出设置为自动。我使用了滚动选项并将其设置为 false,但它仍然滚动。有什么想法吗?

我的 html

<div id="container">
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
    <div class="draggable"> Drag Me </div>
</div>

我的 CSS:

div#container 
    width: 300px;
    height: 300px;
    overflow: auto;


div.draggable 
    padding: 3px;
    font-size: 1.4em;

我的 javascript

$(function()
    $(".draggable").draggable( 
        scroll: false 
    );
);

【问题讨论】:

这是和你看到的一样吗? jsbin.com/ahefi/edit 哇。一点都不。当我拖动一个元素时,div#container 会滚动——你会看到水平和垂直滚动条。我想我明天上班的时候会发布实际的源代码。 【参考方案1】:

也许,在您的 css 中,应该在容器上设置“overflow:auto”,即:

div#container 
    width: 300px;
    height: 300px;
    overflow: auto;


div.draggable 


【讨论】:

糟糕,非常抱歉。我编写了新的代码,而不是从我的实际原始源中复制和粘贴。溢出在 div#container 内。我将对原始帖子进行更改。【参考方案2】:

这可能不是您要寻找的答案,但我认为这对于您的情况来说可能值得一看。

Fluid Infusion 框架包含一个 Layout Reorderer,它可以执行您想要执行的操作。你可以在这里看到一个很棒的演示——包括所有的源代码——在这里:http://fluidproject.org/releases/1.1.2/demos/reorderer/layoutReorderer/demo.html

Infusion 是使用 jQuery 构建的,可以以干净、简单的方式添加到您的页面中。

【讨论】:

【参考方案3】:

问题在于设置overflow:auto - 它的definition 是在需要时显示垂直或水平滚动条。

draggable 中的 scroll:false 并不意味着“不创建滚动条”,而是当 draggable 接近 div 的边缘时是否自动滚动。

假设用户的屏幕非常小 (400x400),而您的页面很大 (2,000x2,000),他们想将元素从一侧拖到另一侧。

使用scroll:true,当元素接近窗口边缘时,它会自动随元素滚动。使用scroll: false,他们必须拖动到 400 像素,放下元素,手动滚动,拾起元素并再次拖动。

scroll: true 的另一个示例是在文档中突出显示文本的工作原理,当您接近页面边缘时,程序会慢慢向下滚动,如果您将光标移动到最底部,它会非常快速地滚动/突出显示。

无论如何,回到代码。

为了说明将您的 CSS 更改为:

div.draggable 
    padding: 3px;
    font-size: 1.4em;
    border: 1px solid black;

然后拖动元素,因为它接近滚动条出现的一侧,因为 div 的宽度。如果您打开scroll:true 并注意到它会随着您靠近边缘而滚动。

现在您可以将您的 #container 更改为此 css 以完全隐藏其边界之外的所有内容:

div#container 
    width: 300px;
    height: 300px;
    overflow: hidden;

隐藏意味着从不创建滚动条,任何超出我的宽度和高度的东西都是完全不可见的。

因此,如果您现在拖动,您会注意到 div 边框超出了容器并且没有创建滚动条。现在通常你会为你的可拖动 div 定义一个硬宽度来防止这种事情,因为overflow:hidden 可能会隐藏关键内容。

这是fiddle。

【讨论】:

以上是关于jQuery UI 拖放的主要内容,如果未能解决你的问题,请参考以下文章

HTML 5 拖放相对于 jQuery UI 拖放的优势

H5 拖放

角度拖放(使用 jQuery UI) - 禁用交换

jQuery UI 拖放

使用 jQuery UI 可排序和引导网格复制 Hubspots 拖放表单构建器 UI

Jquery ui拖放+ .resizable