开始时JQuery UI Draggable包含

时间:2014-04-08 17:01:42

标签: jquery jquery-ui

我有一个需要在启动时设置包含的可拖动而不是初始化。

修改 原因是draggable是组件的一部分,组件可以存在于多个位置,因此我需要检查(在开始时)DOM中存在的位置,并根据它的位置设置适当的包含。

例如,如果元素A中存在draggable,则为元素A设置包含。如果元素B中存在实例,则将其设置为元素B.

为了进一步澄清,我不是在寻找直接的父母作为容器(因为我相信这可以通过将“父”传递给控件来处理),而是一个任意的父,因此我需要这样做开始拖拽的逻辑。

I've tried the obvious (jsfiddle)

$('#dragMe').draggable({
    start: function (event, ui) {
        $(this).draggable('option', "containment", '#container');
    },
});

这样可行,但只有在您将元素拖动两次后才能使用。因此,例如,如果您拿起红色框并将其拖到收容区外,它就会让您。但是如果你将它放入容器然后再拖动它,它将被正确包含。 (注意,我正在使用Chrome)

这让我相信在调用start函数之前会检查包含。

有什么方法可以让JQuery UI识别更改的选项,还是我需要手动限制边界内的可拖动?

1 个答案:

答案 0 :(得分:1)

我决定跟进我的怀疑,即在调用开始事件之前设置了遏制措施。

我在JQuery UI源代码中找到了这段代码:

//Set a containment if given in the options
this._setContainment();

//Trigger event + callbacks
if(this._trigger("start", event) === false) {
    this._clear();
    return false;
}

我只是简单地切换了顺序,以便在事件发生后调用_setContainment()函数。这解决了我的问题,但我有点担心这可能带来的影响(包括错误/可维护性)。

所以,如果有人有任何更好的想法,我会很感激。