如何设置NESTED可拖动元素的正确位置

时间:2012-07-30 05:52:55

标签: jquery

背景: 我有一个可拖动的,我放入一个可放置的可拖动。在'Drop'上,draggable变为嵌套在droppable中。在'out'(即拖拽可拖动外部的拖拽)时,拖拽变得不嵌套 - 即嵌套到身体上。

ISSUE: 可拖动的嵌套和取消嵌套导致可拖动的对齐位置到新位置。这是因为draggable的css包含与previsous parent的相对位置,并且在嵌套到新父级的过程中,假定该相对css是相对于新父级的。

示例和问题: http://jsfiddle.net/sandeepy02/CNtRX/2/的示例 您可以通过

复制问题
  1. 创建对象'Room'和'Table'。

  2. 移动'房间'。

  3. 将'Table'放入'Room'。

  4. 该表重新定位,远离鼠标光标。发生这种情况的原因是因为'table'的css包含了相对于main boundaryContainer的表的位置。当我将'table'嵌入'room'时,相对于'room'应用相同的相对位置,从而导致'table'位置的突然变化。

    实际上,当我拖出'table'时,位置再次捕捉到不同的psoition,因为'table'css现在包含'room'的相对位置,并且'table'追回'boundaryContainer'会导致相对位置'room'被假定为'boundaryContainer'的相对位置。

    任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你的问题在于附加在表格Div上的两个额外参数 - > left& top。我建议的解决方法是,有一个选项可以在每个draggable或droppable事件之后调用一个函数。在该函数中,您可以将这两个属性的值设置为0;

当我使用Firebug删除它们时,位置完全对齐。你可以尝试一下并在这里公布结果吗?

答案 1 :(得分:0)

Afrin,谢谢你的回复。我放弃了相同的解决方案,并停止检查上周的响应。但你的反应似乎就像隧道尽头的光。

我从你建议的内容中修改并修改了我的代码,使得左边和右边不是零,而是可拖动左边和droppable左边的总和。

当我将dropggable放入droppable中时似乎有效。但是当我将可拖动拖动到droppable外时,同样不起作用。可拖动的位置仍在跳跃。

相同的代码位于http://jsfiddle.net/sandeepy02/CNtRX/3/

我做了一些修改,以便我们也可以看到div的位置。

更改位置的代码是:

        ui.draggable.css({
            "left": positionDrag.left - $(this).offset().left,
            "top": positionDrag.top - $(this).offset().top
        });