【问题标题】:How can it be detected when the mouse cursor leaves the webpage if the cursor doesn't touch the edge?如果光标没有接触到边缘,如何检测鼠标光标离开网页?
【发布时间】:2016-05-27 00:06:08
【问题描述】:

我正在为一个看似简单的任务寻找非 JQuery 解决方案:检测鼠标何时离开页面。但是,标准方法使用:

document.onmouseleave
//or
document.onmouseout

仅当鼠标通过边缘离开页面时才会起作用。

这意味着如果鼠标通过进入另一个具有更高焦点的程序(例如:Notepad.exe)而离开,它将失败
如果浏览器被最小化(例如:Win+D),或者如果Alt+Tab,它也会失败用来。 可能还有其他方法会失败。

还有哪些其他方法可以更好地检测鼠标离开?也许甚至通过投票?
这必须在 Chrome+Windows 中工作,但最好是在任何现代浏览器中。

更新
dman2306 已链接到一些用于检测浏览器何时最小化的方法,包括:

document.addEventListener("visibilitychange", function() {
  doThings();
}, false);

我刚刚验证了它适用于 Windows 8.1 上最新版本的 Chrome。

这只会留下光标通过另一个窗口边缘或通过 Alt+Tab 退出的问题。

【问题讨论】:

  • 这样做的原因是什么?
  • 最小化并不意味着鼠标离开了,但无论如何你可以通过使用这种技术来检测最小化stackoverflow.com/questions/10328665/…
  • @dman2306 如果鼠标在 Excel 中点击,你真的会说它还在浏览器中吗?
  • 我指的是您的 win+D 示例,而不是在另一个应用程序示例中的点击。
  • @dman2306 好吧,一旦它被最小化,鼠标仍然不在浏览器中。而且一旦出来,就可以点击其他东西了。也许这是语义?也许正确的词是“插入符号”之类的。无论哪种方式,您的链接都有助于最小化检测,所以谢谢。

标签: javascript


【解决方案1】:

有一个事件onblur 可以满足您的需求。

    window.onblur = function () {
        console.log('blur');
    }

【讨论】:

  • 确实有效!因此,通过将 window.onblur 与 document.onmouseleave 结合起来,我无法找到一种方法来欺骗页面,使其认为鼠标仍在页面中!
  • @Bort - 如果确实解决了您的问题,请将此答案标记为答案
  • 是的,我会的,但我通常会留一些时间让其他人证明另一个答案是错误的/错误的/低效的。例如:我可能错过了另一个事件。
  • 没有document.onmouseleave。有window.onmouseoutwindow.onmouseleavewindow.onmouseout 每个元素上的气泡。这取决于你。
  • window.onmouseleave 对我没有任何影响... document.onmouseloeave 效果很好。
【解决方案2】:

您可以向您的解决方案添加另一个处理 onfocusout 事件的处理程序,该处理程序将检测另一个程序是否获得焦点或窗口是否被最小化。

【讨论】:

  • 我刚刚尝试使用“document.onfocusout=function(){alert("test")};”在 Chrome 中,无法触发 alert()。
  • 虽然它假设可以在 chrome 上工作,但请尝试使用“onblur”事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2021-09-02
  • 2020-05-26
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多