如何使用javascript/jquery检查鼠标是否退出浏览器窗口
How can I check if the mouse exited the browser window using javascript/jquery?
我需要一种方法来检查鼠标是否在浏览器窗口之外。问题是,当鼠标快速移动到浏览器窗口之外(我的元素靠近边缘)时,不会触发mouseout事件(或mousemove)。我想解决这个问题的最好方法是检查鼠标是否在窗口内的计时器,但我还没有找到这样做的方法,因为我需要触发一个事件来获得鼠标坐标。
我是javascript/jquery的新手,但似乎应该有办法做到这一点,但到目前为止我肯定还没能找到。也许我可以强制触发鼠标事件,看看是否有xy值?你知道我该怎么做吗?
提前感谢!
似乎@Joshua Mills在这里解决了这个问题:
- 如何检测鼠标何时离开窗口
尽管它从未被正式选为答案。
您需要检查事件的目标以确保鼠标离开整个页面。
现场演示
JS
$(function() {
var $window = $(window),
$html = $('html');
$window.on('mouseleave', function(event) {
if (!$html.is(event.target))
return;
$('.comeback').removeClass('hidden');
});
$window.on('mouseenter', function(event) {
$('.comeback').addClass('hidden');
});
});
HTML
<div>
<div>
Test
</div>
<div class="comeback">
Come back!
</div>
<div>
Test
</div>
</div>
CSS
.hidden { display: none; }
测试用例包括一些元素嵌套,以验证它是否真的有效。
我想,这看起来像
<html>
<head>
<script type="text/javascript">
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
addEvent(window,"load",function(e) {
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
// stop your drag event here
// for now we can just use an alert
alert("left window");
}
});
});
</script>
</head>
<body></body>
</html>
尝试使用:
document.addEventListener("mouseleave", function(e){
if( e.clientY < 0 )
{
alert("I'm out!");
}
}, false);
我尝试了一个又一个,这确实有效!
https://stackoverflow.com/a/3187524/985399
我跳过了旧的浏览器,所以我缩短了代码以在现代浏览器IE9+:上工作
document.addEventListener("mouseout", function() {
let e = event, t = e.relatedTarget || e.toElement;
if (!t || t.nodeName == "HTML") {
console.log("left window");
}
});
在这里您可以看到浏览器支持
应该很简单:
document.onmouseout = function() {
alert('out');
};
或者jQuery风格:
$(document).mouseout(function() {
alert('out');
});
Fiddle:http://jsfiddle.net/xjJAB/
在IE8、chrome、FF中进行了测试。至少对我来说,事件每次都会触发。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 弹出窗口出现,然后退出
- 使用jQuery检测用户是否退出全屏视频
- 检测用户是否已退出聊天
- 如何检查Javascript生成器是否已退出
- 如何使用javascript/jquery检查鼠标是否退出浏览器窗口
- 使用JS检查整数是否为偶数或按q退出
- 如何检查鼠标指针是否越过浏览器平面(鼠标退出网页)
- 如何检查数据是否退出json格式
- 如何判断setInterval是否是阻止应用退出的最后一件事
- 在web worker中生成- setTimeout是否足够,或者我也必须退出
- 检查鼠标是否在鼠标退出事件 - jQuery 上按下
- 在数组中添加/删除对象,并检查对象是否已退出