Jquery UI可拖动的绝对定位与相对定位有何区别?

21

我有一个包含一些jQuery可拖动元素的div,但是如果我从页面中删除其中任何一个可拖动元素,则其余可拖动元素会因为它们使用relative来定位而移动。

这是一个展示此问题的Fiddle: http://jsfiddle.net/VolatileStorm/aNk6e/

我的解决方案是将可拖动元素使用absolute而不是relative进行定位,但我找不到实现的方法。是否有方法可以做到这一点?如果没有,有人能想到绕过此问题的方法吗?(出于优雅的考虑,我不接受“不要删除其他可拖动元素”)。

4个回答

22
  1. position:absolute添加到您的元素。
  2. 在调用.draggable之前将它们附加到DOM中

3
那个之前拯救了我的一天。谢谢。 - JohnKiller

18

为什么对于你而言,position:absolute 不起作用呢?

由于绝对定位的元素不再是文档流的一部分,因此你的三个 <div> 元素被放置在其包含(定位)元素的 0,0 位置。因此,你需要确定可拖动元素的起始位置


@VolatileStorm:不,它没有。查看我的demo,使用position:absolute - 它从未更改为relative - josh3736
1
是的。这就是为什么我删除了评论。它在我的“生产代码”中,所以说。但是在你的代码中没有。然而,如果我在使其可拖动后将位置设置为绝对位置,则它将保持绝对位置。我想我应该更加努力地推动,哈哈。谢谢! - V.S.
4
为了澄清情况,如果您通过CSS/内联设置可拖动元素的位置为absolute,那么可拖动插件不会将其内联设置为relative,您可以确定(或不确定)起始位置(有助于动态生成元素)。但是,请勿通过CSS选择器.ui-draggable进行定位,因为它是在决定是否应用定位之后添加的。 - drzaus
另外需要补充的是:当父容器设置为 position:static 时,它将停止滚动。要重新启用滚动,请将其设置为 position:absolute - red_trumpet
请注意,如果使用参数iframeFix:true,则jquery UI将将其转换为相对定位。 - Artjom Kurapov
这个被接受的解决方案在这里http://stackoverflow.com/questions/9643075/jquery-draggables-removing-an-element-changes-position-of-other-dropped-element 解决了一个非常类似的问题。 - Billy G

10

当设置元素为可拖动时,您可以使用jQuery的css函数将其位置设置为绝对定位。

$(this).draggable().css("position", "absolute");

设置为绝对定位后,就无法再拖动了。 - Juri

0
也许不是最好的想法,但您可以使用position:relative;定位所有相关的
,然后在您的<body>或者$("document").ready()中包含一个函数调用(如果您正在使用jQuery),该函数遍历每个
,将它们的相对位置转换为绝对位置,并在将它们更改为position:absolute之前将它们设置为其左、上边距。唯一的问题是,在迭代过程中更新样式之前,您需要获取每个
的绝对位置,以免通过迭代更改布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接