【发布时间】:2017-09-28 00:38:02
【问题描述】:
当用户尝试通过将鼠标移动到窗口顶部来离开页面时,我试图向他们显示弹出消息。
我遇到的问题是,似乎 Internet Explorer 无法专门针对鼠标移动到顶部的情况识别 mouseleave 事件。相反,它将指针坐标 clientX 和 clientY 设置为“-1”,在鼠标在窗口外移动到顶部、底部、左侧和右侧的所有情况下。
需要提及的是,如果将鼠标移到右侧窗口外(触发事件浏览器不应在全屏上最大化),它会不时将 clientY 设置为“-1”。如果您将鼠标向左/向右移动 20 次,您将获得 30% 的 clientY = '-1',其余的 % clientY 将包含适当的值。
我使用以下代码:
$(document).mouseleave(function(e){console.log("clientX: " + e.clientX + " clientY: " + e.clientY)});
有什么方法可以专门识别鼠标在顶部的离开吗?非常感谢您的任何回答:)
【问题讨论】:
-
您是否有理由不想为此使用
window.onbeforeunload? -
我记得几年前确切的坐标被混淆了(从 IE9 开始?),这是某种安全“改进”。您可以尝试收听
mousemove并存储您从该事件获得的坐标,可能会有一点延迟(当鼠标离开页面时,mousemove 坐标也会被混淆)。 @PaulAbbott 也许是因为当您将鼠标从浏览器窗口移开时,onbeforeunload不会触发。 -
感谢您的回复。
mousemove的问题是 IE 也没有适当地计算 clientY 的位置。有时它显示 0,但有时值大于 0(例如 7、27 甚至 100。这取决于您移动鼠标的速度。速度越快,获得的值越大)。所以很难根据这个事件来判断客户是把鼠标移到了窗口的顶部还是只是把鼠标移到了页面的顶部(例如,将鼠标移到了标题或页面的菜单)
标签: javascript jquery internet-explorer