Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryUI可拖动捕捉到容器中 问题()的描述:_Javascript_Jquery_Html_Css_Jquery Ui - Fatal编程技术网

Javascript jQueryUI可拖动捕捉到容器中 问题()的描述:

Javascript jQueryUI可拖动捕捉到容器中 问题()的描述:,javascript,jquery,html,css,jquery-ui,Javascript,Jquery,Html,Css,Jquery Ui,使用jQueryUI的.draggable()函数,我试图将红色元素捕捉到蓝色容器的内部。它首先捕捉到一条边,而不是完全在其中(即捕捉到两条边)。必须继续拖动它,直到它捕捉到另一个轴 当它开始以任何角度捕捉时,我希望它回到它的最终位置(完全在容器内)。是否有方法检测快照何时开始(即触发事件),然后使用该方法手动重新定位红色框 示例代码: HTML: <div id="box"></div> <div id="container"></div> $

使用jQueryUI的
.draggable()
函数,我试图将红色元素捕捉到蓝色容器的内部。它首先捕捉到一条边,而不是完全在其中(即捕捉到两条边)。必须继续拖动它,直到它捕捉到另一个轴

当它开始以任何角度捕捉时,我希望它回到它的最终位置(完全在容器内)。是否有方法检测快照何时开始(即触发事件),然后使用该方法手动重新定位红色框

示例代码: HTML:

<div id="box"></div>
<div id="container"></div>
$('#box').draggable({
    snap: '#container',
    snapMode: 'inner',
    snapTolerance: 50
});
#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;
}
CSS:

<div id="box"></div>
<div id="container"></div>
$('#box').draggable({
    snap: '#container',
    snapMode: 'inner',
    snapTolerance: 50
});
#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;
}
小提琴:

快照事件帮助:

现在,在抓拍之后,再也没有拖拽的可能了。这将是另一个令人头痛的问题

除此之外,请注意:您不能触发mouseup来取消拖动事件,这会导致已知的javascript错误,可以在前面的提琴中看到:

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');
    }
});

我不太确定你在问什么,但你是否尝试过增加捕捉公差?将其拖到蓝色框附近。它将首先捕捉到一条边-垂直或水平。当它开始捕捉时,我希望它立即捕捉到两条边,并最终到达其最终目的地(容器)。不幸的是,我不知道如何更好地描述这个问题。是的,调整公差只会使它从更远的距离捕捉到一个边缘。实际上,它不是捕捉到外部边缘,而是捕捉到相同的“水平”。您可以看到,如果将其从蓝色框中移动约1cm(边缘不接触),您将看到两个底部边缘保持成一条直线。当我慢慢地把它拉近蓝色盒子时,它实际上并没有卡到外缘,至少在我的情况下是这样。谢谢你花时间来做这件事。实际上,我使用了
.droppable()
,使用了我认为更优雅、更可行的解决方案,但我真的非常感谢您在这里所做的努力。你是冠军,先生。感谢你的赞扬!