Element.getBoundingClientRect
的解决方案(文档在此)。该方法返回一个包含6个属性的对象:top
、bottom
、left
、right
、width
和height
。您可以使用此方法查找您的<div>
覆盖的区域。var rectanglesOverlap = function(rec1, rec2) {
// Return true if overlap, false if none
}
一旦你已经存储了红色矩形并将所有黑色边框的div存储在一个数组中,你可以通过以下方式检查哪些矩形重叠:
var overlappingRects = blackRects.filter(rectanglesOverlap.bind(null, redRect);
< p > overlappingRects
数组的长度现在告诉您有多少个重叠。
如果您需要帮助选择正确的元素或编写重叠方法,请告诉我。但是关于这些主题已经有很多在线资料了...
#draggable
表示。所有用于交叉的其他 div 都使用 data-category="container"
属性进行选择。
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");
});
JQueryUI
,则可以使用 containment 选项来设置可拖动对象的边界,如下所示。$( "#draggable" ).draggable( { containment: "#divFrame" } );