我希望能够检测到鼠标何时离开窗口,以便在用户的鼠标位于其他位置时可以阻止事件触发.
有关如何做到这一点的任何想法?
我需要知道鼠标光标何时离开div.所以我联系了这个mouseout活动.但是,如果我将鼠标快速移出div,则mouseout事件不会触发.这是正确的:鼠标光标是坐以待毙里面div,它现在是外面的div,然而在mouseout回调没有被调用.(如果我不快速移动鼠标,它可以正常工作.)
在最新的谷歌浏览器中也是如此- 所以不仅仅是"旧浏览器"问题.
解决方法:
之前提出过关于这个问题的问题.显然这只是生活中的事实,我发现的唯一解决方法是手动监控mousemove事件,每次检查光标的x/y坐标并查看它们是否属于div边界框,这样你就有更多的机会如果光标不在其中,则"注意".
与让浏览器本地完成所有这些操作相比,对每个像素移动执行计算有点受到性能影响.编码也很繁琐.
关于我的问题......
为什么浏览器无法可靠地捕获mouseout事件?如果我可以可靠地判断鼠标何时离开div使用上述解决方法,为什么浏览器不能这样做呢?
我理解(从上面链接的答案)JavaScript不会尝试插入"框架".假如你在mousemove处理器上放置一个处理程序document,并在完美的水平线上快速将鼠标向右移动200个像素,则可能无法获得200个mousemove事件.一些将被遗漏.我没有问题.
但是如果在鼠标越过边界时错过了一些像素移动div,为什么mouseout还要跳过该事件呢?当浏览器最终再次开始注册鼠标的位置时(在突然快速移动之后),即使鼠标现在在盒子外面数英里,关键是它曾经在盒子中而不再是.那么为什么它不会发射mouseout事件呢?
我只是不明白为什么这对浏览器供应商来说是个难题.(但我相信可能有一个很好的理由,我觉得这太愚蠢了.)
我发布这个问题主要是出于好奇,但我希望答案可以提供一些有助于我更有效地解决问题的见解.此外,任何替代解决方案(比上面提到的更快)都是受欢迎的.
我正在制作一个计数器,当文档处于焦点时会倒计时.它在模糊时停止倒计时.
它在FF中工作,但使用Safari和Chrome,计数器根本不起作用.
Safari/Chrome是否存在兼容性问题?
我正在使用的是$(document).blur()和$(document).focus(),并且在一个$(document).ready()区块内都有.
var tm;
$(document).ready(function(){
var seconds = 50;
$('#timer').html(seconds);
countdown();
$(window).focus(function(){
function countdown(){
if (seconds > 0) {
seconds--;
$('#timer').text(seconds);
tm = setTimeout(countdown,1000);
}
if (seconds<=0){
$('#timer').text('Go');
}
});
$(window).blur(function(){
clearTimeout(tm);
seconds++;
$('#timer').text(seconds);
});
});
Run Code Online (Sandbox Code Playgroud)