jQuery UI可拖动捕捉到容器中

时间:2014-02-28 11:58:37

标签: javascript jquery html css jquery-ui

问题描述(Fiddle):

使用jQuery UI的.draggable()函数,我试图让红色元素捕捉到蓝色容器的内部。它首先捕捉到一个边缘,而不是完全捕捉到它内部(即两个边缘)。您必须继续拖动它,直到它与另一个轴对齐。

当它开始以任何角度拍摄时,我希望它到达其最终位置(完全在容器内)。有没有办法检测快照何时开始(即事件被触发),然后使用它来手动重新定位红框?

示例代码:

HTML:

<div id="box"></div>
<div id="container"></div>

JavaScript的:

$('#box').draggable({
    snap: '#container',
    snapMode: 'inner',
    snapTolerance: 50
});

CSS:

#box {
    background: red;
    width: 100px;
    height: 100px;
    position: absolute;
    z-index: 1;
}
#container {
    width: 102px;
    height: 102px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -51px;
    margin-left: -51px;
    border: 1px solid blue;
}

1 个答案:

答案 0 :(得分:2)

小提琴:http://jsfiddle.net/W8yaz/9/

快照活动帮助:Jquery UI – draggable 'snap' event

现在,在捕捉之后不再有可能的拖拽。这将是另一个令人头痛的问题。

除了注意:你不能触发mouseup来取消拖动事件,这会导致一个已知的javascript错误,可以在之前的小提琴中看到:http://jsfiddle.net/W8yaz/7/

JavaScript的:

$('#box').draggable({
    snap: '#container',
    snapMode: 'inner',
    snapTolerance: 50,
    drag: function (event, ui) {
        if ($(this).hasClass('snapped')) {
            var position = $('#container').position();

            $(this).css({
                top: position.top,
                left: position.left
            });
            return false;
        } else {
            var draggable = $(this).data("uiDraggable");
            $.each(draggable.snapElements, function (index, element) {
                if (element.snapping) {
                    draggable._trigger("snapped", event, $.extend({}, ui, {
                        snapElement: $(element.item)
                    }));
                }
            });
        }
    },
    snapped: function (event, ui) {
        $(this).addClass('snapped');
    }
});