我有两个 div 元素。它们每个都有 450 像素的宽度和高度。如何检查第一个 div 是否与第二个 div 重叠?
我尝试使用 javascript hittest,但它有点复杂。由于我试图找出它实际上是如何工作的,我想从一个更简单的代码开始。
我发现我可以使用.getClientRects来获取元素的边界,但我不确定如何比较边界。
请给我提意见!
我有两个 div 元素。它们每个都有 450 像素的宽度和高度。如何检查第一个 div 是否与第二个 div 重叠?
我尝试使用 javascript hittest,但它有点复杂。由于我试图找出它实际上是如何工作的,我想从一个更简单的代码开始。
我发现我可以使用.getClientRects来获取元素的边界,但我不确定如何比较边界。
请给我提意见!
像这样的东西rect1
并通过getBoundingClientRect()rect2
检索:
var overlap = !(rect1.right < rect2.left ||
rect1.left > rect2.right ||
rect1.bottom < rect2.top ||
rect1.top > rect2.bottom)
说明:如果括号中的一个或多个表达式是true
,则不存在重叠。如果都是false
,则必须有重叠。
这是我几天前做的东西:https ://gist.github.com/yckart/7177551
var AABB = {
collide: function (el1, el2) {
var rect1 = el1.getBoundingClientRect();
var rect2 = el2.getBoundingClientRect();
return !(
rect1.top > rect2.bottom ||
rect1.right < rect2.left ||
rect1.bottom < rect2.top ||
rect1.left > rect2.right
);
},
inside: function (el1, el2) {
var rect1 = el1.getBoundingClientRect();
var rect2 = el2.getBoundingClientRect();
return (
((rect2.top <= rect1.top) && (rect1.top <= rect2.bottom)) &&
((rect2.top <= rect1.bottom) && (rect1.bottom <= rect2.bottom)) &&
((rect2.left <= rect1.left) && (rect1.left <= rect2.right)) &&
((rect2.left <= rect1.right) && (rect1.right <= rect2.right))
);
}
};
element.getBoundingClientRect() 在现代浏览器中非常安静,提供相对于屏幕的边界。看这里比测试边界框是否重叠,这是简单的几何图形......
哦,对不起......发现你的编辑太晚了......
在早于版本 8 的 Internet Explorer 中,返回的TextRectangle对象包含物理像素大小的坐标,而从版本 8 开始,它包含逻辑像素大小的坐标。
如果您需要整个元素的边界矩形,请使用getBoundingClientRect方法。