破坏可拖动遏制的Jquery事件

时间:2016-08-06 16:21:42

标签: jquery collision-detection draggable

我想为一个可拖动的项目打破它的收容时添加一个回调。我有这个功能:

function makeDraggable(){
    $( ".draggable" ).draggable({ containment: "parent" , grid: [ 25, 25 ] });
}

有没有一种简单的方法可以实现这一点,而不使用碰撞检测?如果没有,我将如何进行碰撞检测?

1 个答案:

答案 0 :(得分:2)

当元素落在另一个元素的4个角上时,你可以检查元素的4个角,看看是否有任何角落在那个元素内,并从那个点做任何你想做的事。

遏制的问题是拖拽可以在该遏制内完成 (您不能将该元素拖到该遏制之外)。

以下是您可以使用的示例(我在那里使用了console.log

$(function() {
  $("#draggable").draggable({
    stop: function( event, ui ) {
      droppapleBox = $('#droppable-area')[0].getBoundingClientRect()
      draggableBox = ui.helper[0].getBoundingClientRect()
      if (draggableBox.left > droppapleBox.right || draggableBox.right < droppapleBox.left || draggableBox.top > droppapleBox.bottom || draggableBox.bottom < droppapleBox.top) {
        console.log('Element dropped completely outside the drop area');
      } else {
        console.log('Element dropped inside the drop area');
      }
    }
  });
});
body {
  font-family: arial;
  font-size: 12px;
}
.drag-box {
  width: 50px;
  height: 50px;
}

.drop-box {
  width: 150px;
  height: 150px;
  margin-left: 70px;
  margin-top: 70px;
  margin-bottom: 250px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<body>
 
<div id="droppable-area" class="drop-box ui-widget-header">
  <p>Drop me here</p>
  <div id="draggable" class="drag-box ui-widget-content">
    <p>Drag Me</p>
  </div>
</div>