我想在鼠标离开浏览器窗口时运行一些 Javascript 代码。我只需要支持 Safari (WebKit.)
我尝试在窗口上放置一个 mouseout 处理程序。当鼠标离开浏览器窗口时,该处理程序被可靠地调用。但是由于冒泡,当鼠标在文档中的元素之间移动时也会调用它。我不知道如何确定鼠标何时实际离开窗口以及何时仅在元素之间移动。
当鼠标离开窗口时,恰好会产生一个事件,并且目标元素看起来就是鼠标实际所在的元素。所以检查目标元素是窗口还是文档不起作用。并且将整个页面包装在一个不可见的包含 div 中也不起作用:如果 div 是不可见的,那么鼠标将永远不会在它上面,所以没有任何变化。
(如果我将处理程序放在 document 或 document.body 上,也会发生同样的事情,除了令人惊讶的是 document.body 在鼠标进入或离开窗口的空白部分(例如创建的空白垂直空间)时没有获得 mouseover/mouseout 事件通过绝对定位元素底部:0。对于该空间,文档和窗口将获得鼠标悬停/鼠标退出事件,目标为 <html>,但 document.body 不会。)
我的一些想法:
- 在每个 mouseout 事件中,获取鼠标的实际位置并查看它是否实际上位于窗口上方。但我不知道这是否真的可行,而且听起来要消除所有的竞争条件会很棘手。
- 还注册一个鼠标悬停处理程序并检测鼠标悬停未进行(或紧随其后)鼠标悬停的情况。但这需要一个计时器。
我们使用prototype.js 非常理想,我想用原型的Event.observe 来表达解决方案,但我可以弄清楚那部分。
感谢您的任何建议!