javascript - 检测到多 div 叠加的碰撞

标签 javascript jquery html css

我想在我的元素中检测到多个 div 的碰撞。

请看下图:

  1. 红框黑边是一个div
  2. 红框是可移动的

如何检测红框是否触及了它周围的一个边框?

我尝试过使用 canvas 解决方案,但对我来说不是一个好方法。

enter image description here

最佳答案

虽然这不是确切的解决方案,但它似乎适用于可移动 div 位于给定 div 的交叉区域中的情况。

可移动的 div 用 id #draggable 表示。使用 data-category="container" 属性选择所有其他用于交叉的 div。

HTML

<div data-category="container" style="width:200px;height:200px;border:3px solid #000; position:absolute;top:10;left:10"></div>
<div data-category="container" style="width:500px;height:300px;border:3px solid #000; position:absolute;top:100;left:100"></div>
<div data-category="container" style="width:400px;height:400px;border:3px solid #000; position:absolute;top:130;left:50"></div>
<div id="draggable" style="height:20px;width:30px;background-color:red;position:absolute;top:160;left:130"></div>

脚本

  var minTop = Number.MAX_VALUE;
  var posTop, posLeft = 0;
  var minBottom = Number.MAX_VALUE;
  var minLeft = Number.MAX_VALUE;
  var minRight = Number.MAX_VALUE;

  $(document).ready(function()
  {
      //loop through intersection divs
      $('div[data-category=container]').each(function(){
        var diffTop = $('#draggable').offset().top - $(this).offset().top; //get distance between tops
        var diffLeft = $('#draggable').offset().left - $(this).offset().left; //get distance between lefts
        var diffBottom = ($(this).offset().top + $(this).height()) - ($('#draggable').offset().top + $('#draggable').height()); //get distance between bottoms
        var diffRight =  ($(this).offset().left + $(this).width()) - ($('#draggable').offset().left + $('#draggable').width()); //get distance between rights

        //store min top
        if (diffTop > 0 && diffTop < minTop)
        {
            minTop = diffTop;
            posTop = $(this).offset().top;
        }

        //store min left
        if (diffLeft > 0 && diffLeft < minLeft)
        {
            minLeft = diffLeft;
            posLeft = $(this).offset().left;
        }   

        //store min bottom
        if (diffBottom > 0 && diffBottom < minBottom)
        {
            minBottom = diffBottom;
        }   

        //store min right
        if (diffRight > 0 && diffRight < minRight)
        {
            minRight = diffRight;
        }           
      });

      //create div within the intersection area
      $("<div id = '#divFrame' style='border:3px solid blue;position:absolute;top:" + (posTop) + ";left:" + (posLeft) + ";width:" + (minLeft + minRight + $('#draggable').width()) + "px;height:" + (minTop + minBottom + $('#draggable').height()) + "px;'></div>").appendTo("body");
  });

下面是针对给定 html 执行脚本时的样子。

enter image description here

如果您使用的是 JQueryUI,也许您可​​以使用 containment 设置可拖动对象的边界。选项如下。

$( "#draggable" ).draggable( { containment: "#divFrame" } );

关于javascript - 检测到多 div 叠加的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570948/

相关文章:

javascript - 引用事件函数内的容器对象

javascript - 带有动态 img src 的 JS/HTML 图像转换器

javascript - 使用 jQuery 强制更改表单

javascript - 关于值(value)变化的启动事件

javascript - 100% 固定宽度/高度的 iFrame 缺少滚动条

jquery - 将值注入(inject) CSS 类

JavaScript 参数在箭头函数中使用,但未在本地范围内的任何位置声明 - Twilio 函数

javascript - 获取空白网页并显示 'event.returnValue is deprecated' 警告

jquery - 使用ajax mvc更新数据时如何更新表中的行

javascript - 为什么 window.onscroll 函数表现得很奇怪?