检测鼠标从哪一侧离开 div

Detect from which side the mouse left a div

我修改了另一个问题best answer的代码(目的是检测鼠标从哪一侧进入 a div) 为了让它检测鼠标从哪一侧 left a div.

Here is the my code。我更改了日志以显示在控制台中。但不知何故,结果总是 "right" 或 "bottom" 而不是 "top" 或 "left".

有什么建议吗?

我一直在研究代码并修改了一些内容。

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

首先,我使用 getBoundingClientRect() 其中 returns 元素的位置(左、上、右和下)。

然后我得到鼠标坐标并计算离哪条边最近。

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

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>

希望对你有帮助。

干杯!