【问题标题】:Adding Droppables While Dragging Draggable拖动 Draggable 时添加 Droppables
【发布时间】:2011-06-08 06:04:18
【问题描述】:

期望的行为:

用户将一个项目拖到树上。将鼠标悬停在关闭的节点上时,该节点会展开并显示子节点。此时用户可以继续拖动到子节点并放在其中的任何一个上。

这工作正常。我使用 droppables 的“over”选项来扩展节点并使子节点可放置。

但我需要添加更多功能。首先,我为可拖动对象添加了一个助手。仍然工作正常。然后我将 Draggables 和 droppables 放入两个不同的容器(div)中。此时,助手不会拖出容器。解决方案是在可拖动对象上设置“appendTo:'body'”。一切都好……嗯,不完全是。

现在子节点在当前拖动操作期间不可拖放。用户必须释放当前拖动并重新拖动到所需的子节点。如果我删除 appendTo 选项,问题就会消失,但是助手不会在视觉上移动到可放置容器中。

有什么方法可以让我“唤醒”这些新的 droppables 以使它们立即可droppable?

【问题讨论】:

    标签: jquery jquery-ui draggable droppable


    【解决方案1】:

    这就是我解决几乎相同问题的方法。在我的情况下,当我在拖动可拖动时切换节点打开时,子项通过 ajax 加载,然后它们被初始化为 droppables。然后我必须这样做:

    ui.draggable.draggable('option', 'refreshPositions', true);
    var tempFunc = function() {
        if (ui.draggable) {
            ui.draggable.off('drag', tempFunc);
            setTimeout(function() {
                ui.draggable.draggable('option', 'refreshPositions', false);
            }, 100);
        }
    };
    ui.draggable.on('drag', tempFunc);
    

    这使得draggable 具有refreshPositions 选项作为true 足够长的时间让新的droppables 加入当前的拖动。您也可以在整个拖动过程中将refreshPositions 选项设置为true,但这会带来我不想要的性能损失。

    我没有找到另一种方法。最好有一个方法可以在拖动过程中调用来刷新位置,但没有。

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 2023-03-12
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多