【发布时间】:2010-10-23 02:24:57
【问题描述】:
当我从设置为溢出的容器 div 中拖动一个 div 时,我产生了不希望的效果:滚动。
我找到了其他人遇到问题但我无法找到解决方案的示例
发生的情况是滚动只是增加了,如果您想拖动到可滚动 div 内的目的地但我希望能够将其从滚动控制中取出,我可以明白为什么这将是理想的行为。
【问题讨论】:
当我从设置为溢出的容器 div 中拖动一个 div 时,我产生了不希望的效果:滚动。
我找到了其他人遇到问题但我无法找到解决方案的示例
发生的情况是滚动只是增加了,如果您想拖动到可滚动 div 内的目的地但我希望能够将其从滚动控制中取出,我可以明白为什么这将是理想的行为。
【问题讨论】:
在两个溢出自动 div 之间进行拖动时,我遇到了类似的问题。在前面的答案的帮助下,我发现这种组合对我有用(Safari 5.0.3、jquery-1.4.4、jquery-ui-1.8.7):
appendTo: 'body',
containment: 'window',
scroll: false,
helper: 'clone'
【讨论】:
追加到
元素,SelectorDefault:'parent'
通过 appendTo 选项传递或选择的元素将在拖动过程中用作可拖动助手的容器。默认情况下,辅助对象与可拖动对象附加到同一容器中。
代码示例 使用指定的 appendTo 选项初始化可拖动对象。
$('.selector').draggable({ appendTo: 'body' });
【讨论】:
一定要注意文档
http://docs.jquery.com/UI/Draggable#option-scroll
滚动
类型:布尔值
默认值:true
如果设置为true,容器在拖动时自动滚动。
所有进入这里的人,从我的错误中吸取教训,RT(F)M!!!
【讨论】:
它的克隆解决方案有效,但有两个问题。
首先:克隆被附加到正文中。根据您的 css,您的元素可以更改样式,因为在它开始之前,它位于另一个元素内部,并且在拖动过程中,它将直接位于 body 元素上。
第二:有时元素必须移动,然后克隆让对象在那里。
所以,这个问题的解决方案是:
$('.selector').draggable({
helper: 'clone',
start: function(){
$(this).hide();
},
stop: function(){
$(this).show()
}
});
【讨论】:
设置滚动选项不会阻止子项隐藏在溢出区域中。我想出了一个使用 helper 选项的工作循环。看看吧:
http://pastebin.me/164f0a4073496563fe3179ddcec5fd6d
这里还引用了我发的另一篇文章:
jquery ui draggable elements not 'draggable' outside of scrolling div
【讨论】:
您还可以指定不想包含哪些类型的元素。
<div class="draggable">
<h2>This will drag the div</h2>
<ul>
<li>This won't drag the div</li>
</ul>
</div>
应用此取消属性以忽略指定子元素中的事件
$('.draggable').draggable({cancel : 'ul'});
【讨论】: