javascript - Jquery 可拖动碰撞检测错误

标签 javascript css drag-and-drop collision

在带有碰撞检测的 jquery-draggable-collision 库中有一个错误。即使调用了碰撞检测功能,div 也会重叠。我无法解决它,所以如果有人能帮助我,我将不胜感激。 此错误的示例在这里:http://jsfiddle.net/q3x8w03y/10/

$("#dragMe1").draggable({
    snap: ".bnh",
obstacle: ".bnh",
preventCollision: true,
containment: "#moveInHere",
start: function(event, ui) {
        $(this).removeClass('bnh');
    },
    stop: function(event, ui) {
        $(this).addClass('bnh');
    }
});
$("#dragMe2").draggable({
    snap: ".bnh",
obstacle: ".bnh",
preventCollision: true,
containment: "#moveInHere",
start: function(event, ui) {
        $(this).removeClass('bnh');
    },
    stop: function(event, ui) {
        $(this).addClass('bnh');
    }
});

最佳答案

这不是错误。事实上,在你的 fiddle 中,碰撞代码工作得很好。问题是,在拖动事件结束后,对撞机会捕捉到障碍物。有时它捕捉 inner 有时它捕捉 outer 取决于元素的位置。

幸运的是,您可以将 snapMode 选项定义为 outer,这将防止元素在碰撞后重叠。只需添加选项:

$("#dragMe1").draggable({
        snap: ".bnh",
    snapMode: "outer",
    obstacle: ".bnh",
    preventCollision: true,
    containment: "#moveInHere",
    start: function(event, ui) {
            $(this).removeClass('bnh');
        },
        stop: function(event, ui) {
            $(this).addClass('bnh');
        }
});
$("#dragMe2").draggable({
        snap: ".bnh",
    snapMode: "outer",
    obstacle: ".bnh",
    preventCollision: true,
    containment: "#moveInHere",
    start: function(event, ui) {
            $(this).removeClass('bnh');
        },
        stop: function(event, ui) {
            $(this).addClass('bnh');
        }
});

关于javascript - Jquery 可拖动碰撞检测错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35036755/

相关文章:

javascript - 检测屏幕分辨率以加载替代 CSS 是个好主意吗?

C# 在 Canvas 中拖放多个图像

javascript - 如何将 forEach 映射到 angularJS 中的 Accordion

javascript - 在Sigma.js中加载JSON文件但无法绑定(bind)overEdge事件

javascript - 你能做一个 HTML "onwrap"

javascript - 如何将当前页面样式表作为字符串获取?

javascript - AngularJS动态页面标题保持先加载大括号

javascript - vue.js 在更新数组后不更新 DOM

ios - UIControlEventTouchDragExit 在距 UIButton 100 像素时触发

ios - UITableView 中的自动滚动更顺畅