【问题标题】:How to check if two div overlap? [duplicate]如何检查两个div是否重叠? [复制]
【发布时间】:2016-09-27 21:19:39
【问题描述】:

我试图检测我的两个 div 是否重叠。 我有一个包含文本块的 div,该 div 可以通过 buttonclick 展开和缩小。下面是另一个 div,它将被“事物”填充,直到某个点它会变成一个滚动列表。现在到棘手的部分。

这很好用,直到列表填充到最大(我无法更改)或在平板电脑上 7"。

所以我正在尝试编写一个可以检测两个 div 是否重叠的方法。 我无法在任何地方找到一个好的解决方案,可能没有,或者我没有搜索正确的东西,无论哪种方式我都需要帮助。

这是我迄今为止尝试过的:

     crashDetection(event, pageInfoBlock) {
            let helBlockTop = parseInt(document.getElementById('page-info').getBoundingClientRect().bottom, 10);
            let helBlockBottom = parseInt(document.getElementById('page-info').getBoundingClientRect().height, 10);
            let containerBottom = parseInt(document.getElementById('bottomContainer').getBoundingClientRect().top, 10);

            if (helBlockTop + helBlockBottom > containerBottom && containerBottom !== 0) {
console.log("It overlap");
            }
        }

这行得通.. 几乎是因为在某些情况下,当我向下滚动包含整个内容的 div 时,它会被拉伸,所以看起来不错.. 但是如果我再次滚动到顶部,它们会重叠.. 并且我的方法检测到重叠,即使没有..

所以我的问题是如何检测两个 div 是否重叠? 请不要使用 JQuery,对不起我的英语不好..:P

【问题讨论】:

  • 如果没有 DOM 结构的相关部分(即两个 divs 是兄弟姐妹、孩子还是更复杂的东西,以及代码中的 id 与什么匹配,这非常困难猜测发生了什么。还提供 CSS 的相关部分以了解您的 div 重叠的方式/原因可能会有所帮助,直接在 CSS 中修复可能要容易得多,然后尝试在 JS 中解决。
  • 很抱歉,我发现了一个关于此的问题,因为我发现了一个像魅力一样工作的遮阳篷:stackoverflow.com/questions/12066870/… 无论如何感谢您的帮助!
  • 请对您的帖子进行拼写检查。

标签: javascript


【解决方案1】:
function collision($div1, $div2) {
            var x1 = $div1.offset().left;
            var y1 = $div1.offset().top;
            var h1 = $div1.outerHeight(true);
            var w1 = $div1.outerWidth(true);
            var b1 = y1 + h1;
            var r1 = x1 + w1;
            var x2 = $div2.offset().left;
            var y2 = $div2.offset().top;
            var h2 = $div2.outerHeight(true);
            var w2 = $div2.outerWidth(true);
            var b2 = y2 + h2;
            var r2 = x2 + w2;
            if (b1 <= y2 || y1 >= b2 || r1 <= x2 || x1 >= r2) return false;
            return true;
        }

【讨论】:

  • 有什么原因你不会只使用边界矩形 (getBoundingClientRect)?
  • 如果我们想要一些像 1px 差异这样的超大尺寸的协商,那么我们可以在这里进行管理。到任何 div
猜你喜欢
  • 2012-12-10
  • 2013-09-27
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多