检测鼠标从哪一侧离开div

时间:2017-07-03 04:52:16

标签: javascript direction mouseleave

我修改了另一个问题best answer的代码(旨在检测鼠标 输入 a div的哪一方)为了让它检测鼠标从哪一侧 离开 一个div

Here is the my code。我更改了日志以在控制台中显示。但不知何故,结果总是“正确”或“底部”,没有“顶部”或“左”。

有任何建议吗?

1 个答案:

答案 0 :(得分:2)

我一直在研究代码,我修改了一些东西。

由于您使用绝对位置定位div,因此需要以不同的方式检查位置。

首先,我使用getBoundingClientRect()返回元素的位置(左,上,右和底)。

然后我得到鼠标坐标,我计算哪个边缘最接近。

您可以在此处查看我的代码示例:

document.querySelector('#content').onmouseleave = function(mouse) {
  var edge = closestEdge(mouse, this);
  console.log(edge);
}

function closestEdge(mouse, elem) {
  var elemBounding = elem.getBoundingClientRect();

  var elementLeftEdge = elemBounding.left;
  var elementTopEdge = elemBounding.top;
  var elementRightEdge = elemBounding.right;
  var elementBottomEdge = elemBounding.bottom;

  var mouseX = mouse.pageX;
  var mouseY = mouse.pageY;

  var topEdgeDist = Math.abs(elementTopEdge - mouseY);
  var bottomEdgeDist = Math.abs(elementBottomEdge - mouseY);
  var leftEdgeDist = Math.abs(elementLeftEdge - mouseX);
  var rightEdgeDist = Math.abs(elementRightEdge - mouseX);

  var min = Math.min(topEdgeDist,bottomEdgeDist,leftEdgeDist,rightEdgeDist);

  switch (min) {
    case leftEdgeDist:
      return "left";
    case rightEdgeDist:
      return "right";
    case topEdgeDist:
      return "top";
    case bottomEdgeDist:
      return "bottom";
  }
}
#content {
  width: 100px;
  height: 100px;
  background: lightblue;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div id="content"></div>

我希望能帮助你。

干杯!