检测鼠标从哪一侧离开 div

Posted

技术标签:

【中文标题】检测鼠标从哪一侧离开 div【英文标题】:Detect from which side the mouse left a div 【发布时间】:2017-12-06 06:37:44 【问题描述】:

我修改了另一个问题的best answer 的代码(旨在检测鼠标从哪一侧进入 div)以使其检测鼠标从哪一侧离开div

Here is the my code。我将日志更改为在控制台中显示。但不知何故,结果总是“右”或“下”,没有“上”或“左”。

有什么建议吗?

【问题讨论】:

您的代码似乎运行良好... @Sagar 对不起。我错误地链接了最佳答案的 jsFiddle。我已更正链接以使其链接到我的 jsFiddle。 上一个小提琴的模组对你有用吗? 我认为问题在于它不适用于位置:绝对。你试过没有那个吗? @IanY。我也测试了绝对定位效果以获得最佳答案,并且似乎正在发生相同的错误。 【参考方案1】:

我一直在编写代码并修改了一些内容。

由于您使用绝对位置定位 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>

希望对你有帮助。

干杯!

【讨论】:

非常感谢!这行得通。另一个问题的Another answer 也注意到了绝对定位的问题。

以上是关于检测鼠标从哪一侧离开 div的主要内容,如果未能解决你的问题,请参考以下文章

动画 div 悬停和鼠标离开延迟

在 Actionscript 3 中拖动时检测鼠标离开阶段

鼠标点击触发鼠标离开

怎样实现鼠标滚轮翻页时,当某个div进入窗口时该div的动画播放,div离开窗口时动画回放。

如何实现鼠标经过弹出窗口,鼠标离开后窗口消失? PS:重点是弹窗里面的内容还可以设置链接

jq div鼠标放上离开马上展开收缩方法