jQuery Draggable和溢出问题


77

当我从设置为溢出的容器div中拖动div时,会产生不期望的效果:滚动。

我找到了其他人遇到问题的示例,但是我找不到解决方案

粘贴箱示例

发生的事情是滚动只是增加了,我可以理解为什么如果您想拖动到可滚动div内的目标位置,但是我希望能够将其移出滚动控制范围之外,这将是理想的行为。


Answers:


105

我在启动两个溢出自动div之间的拖动时遇到了类似的问题。在前面的答案的帮助下,我发现此组合适用于我(Safari 5.0.3,jquery-1.4.4,jquery-ui-1.8.7):

appendTo: 'body',
containment: 'window',
scroll: false,
helper: 'clone'

12
对我来说,甚至是助手:对我而言,“ clone”即可解决问题
max4ever 2011年

年,帮手也为我工作(自己)
Stevanicus 2012年

@ max4ever,如果我仅包含helper:clone,它可以工作,其他人之一搞砸了它!感谢您的评论。
Thomas Dignan

1
非常感谢,您保存了我的一天
arjuncc 2014年

2015年,这个答案仍然震撼人心!
奥斯丁·洛维尔2015年

56

appendTo

元素,选择器默认值:'parent'

传递到appendTo选项或由appendTo选项选择的元素将在拖动过程中用作可拖动帮助程序的容器。默认情况下,辅助程序与可拖动对象附加到同一容器。

代码示例使用指定的appendTo选项初始化可拖动对象。

$('.selector').draggable({ appendTo: 'body' });

我尝试按照您的建议进行操作,但是并没有将其更改为所需的行为,将您提到的代码添加到“粘贴” bin页面上的示例中时,它对您有用吗?谢谢
Phill Duffy

3
是的,我在这个问题上完全失败了。我玩了一个小时。我能得到的最好的是我如何离开它,可拖动式在溢出时不起作用:(
乍得·格兰特

1
不用担心,感谢您的努力!:)
Phill Duffy

4
+1这实际上对我有用。
塔马斯·辛格

1
@EvoD-无论如何,本地热门人物很有可能只是在这里获取他的信息。
Thomas Dignan

36

当然要注意文档

http://docs.jquery.com/UI/Draggable#option-scroll

滚动

类型:布尔
值默认值: true
如果设置为true,则容器在拖动时会自动滚动。

所有进入这里的人,请从我的错误中学习,RT(F)M!


4
确实浪费了2个小时。我们应该真正进行RTFM
先生

我的手风琴也有类似的问题。我在手风琴面板内部有一个可拖动的对象,想将其拖动到手风琴的外部,但是手风琴面板的“溢出”设置为“自动”,所以我从未设法退出手风琴。在手风琴上设置“ scroll:false”没有帮助。最后,我否决了jquery-ui中设置的溢出。这使内容面板的高度看起来很奇怪,因此我必须将电线固定到指定的高度。那行得通。
Asle G

20

克隆解决方案可以工作,但是有两个问题。

第一:将克隆体附加到身体上。根据您的CSS,您的元素可以更改样式,因为在开始之前,它位于另一个元素的内部,并且在拖动过程中,它将直接位于body元素上。

第二:有时元素必须移动,而克隆对象将其放在那里。

因此,解决此问题的方法是:

$('.selector').draggable({
    helper: 'clone',
    start: function(){
        $(this).hide();             
    },
    stop: function(){
        $(this).show()
    }
});

1
完善!感谢您对CSS的提示-帮助我解决了两个问题。
mattanja'9

1
要真正模仿Draggable的“原始”行为,您更喜欢使用CSS属性“ visibility”
mexique1 2012年


-1

您也可以指定不想包括的元素类型。

<div class="draggable"> 
    <h2>This will drag the div</h2>
    <ul>
       <li>This won't drag the div</li>
    </ul>
</div>

应用此cancel属性可忽略指定子元素中的事件

$('.draggable').draggable({cancel : 'ul'});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.