我遇到这种情况:
当元素位于另一个元素之上时,我需要检测情况。这是SVG元素:
<circle r="210.56" fill="#1ABCDB" id="01" priority="4" cx="658" cy="386"></circle>
<circle r="210.56" fill="#1ADC4A" id="02" priority="4" cx="858" cy="386"></circle>
我必须弄清楚如何做到这一点,也许有人可以给我一些提示。 我使用jQuery。很多请求帮助。
答案 0 :(得分:1)
好吧,至少如果你正在处理圈子,这有点简单,因为圈子有一个很好的属性:圈子以任何方式重叠,它们的半径之和应该大于它们之间的距离他们的两个中心。
所以它应该只是一个问题:
<circle>
元素中定义,并且<circle>
元素上),然后答案 1 :(得分:0)
您可以查看此功能:
function upperElements(el) {
var top = el.offsetTop,
left = el.offsetLeft,
width = el.offsetWidth,
height = el.offsetHeight,
elemTL = document.elementFromPoint(left, top),
elemTR = document.elementFromPoint(left + width - 1, top),
elemBL = document.elementFromPoint(left, top + height - 1),
elemBR = document.elementFromPoint(left + width - 1, top + height - 1),
elemCENTER = document.elementFromPoint(parseInt(left + (width / 2)), parseInt(top + (height / 2))),
elemsUpper = [];
if (elemTL != el) elemsUpper.push(elemTL);
if (elemTR != el && $.inArray(elemTR, elemsUpper) === -1) elemsUpper.push(elemTR);
if (elemBL != el && $.inArray(elemBL, elemsUpper) === -1) elemsUpper.push(elemBL);
if (elemBR != el && $.inArray(elemBR, elemsUpper) === -1) elemsUpper.push(elemBR);
if (elemCENTER != el && $.inArray(elemCENTER, elemsUpper) === -1) elemsUpper.push(elemCENTER);
return elemsUpper;
};
答案 2 :(得分:0)
理查德的回答是好的,如果有2个圈子,但如果有很多,那么我会建议以下步骤
棘手的步骤是步骤1,可以使用像素绘制算法(我的偏好)近似计算。对于其他方法,您可以浏览以下stackoverflow question