2014-01-17 46 views
0

我使用下面的函数(在this really helpful post找到)来检测鼠标是否离开了窗口:鼠标缓慢移出窗口时无法正常工作 - 解决方法?

var addEvent = function (obj, evt, fn) 
{ 
    if (obj.addEventListener) 
    { 
    obj.addEventListener(evt, fn, false); 
    } 
    else if (obj.attachEvent) 
    { 
    obj.attachEvent("on" + evt, fn); 
    } 
}; 

addEvent(document, "mouseout", function (e) 
{ 
    e = e ? e : window.event; 
    var from = e.relatedTarget || e.toElement; 
    if (!from || from.nodeName == "HTML") 
    { 
    console.log("left the window"); 
    } 
}); 

然而,当鼠标离开该窗口确实缓慢,或当鼠标实在是这是不工作在窗户离开窗户之前靠近窗户的边界。

是否有解决方法,使用jQuery或纯Javascript?

回答

0

如果你使用jQuery,你可以绑定mouseout事件:

$(document).on('mouseout', function() { console.log("left the window") }); 

你并不需要计算到鼠标的任何引用。由于事件直接绑定到文档,因此将其有效地绑定到页面的边界。主内容窗格外的任何位置(例如标签栏,网址栏,窗口边框等)均位于文档之外,并会触发鼠标移出。它不会在任何其他用户环境下触发。

这里是一个工作Fiddle Demo

+0

不,这是行不通的。由于事件传播,我相信,它将鼠标悬停在文档上时将所有内容都检测为鼠标移动。不幸的是,jQuery的用户并没有这样做。 –

+0

我添加了一个小提琴演示,显示这个工程。 – Bic

+0

在真实条件下尝试。在我们现在的页面上(它有jQuery)。它不工作。 –

0

我已经做了这个解决办法,当他们接近页面的边缘(15个像素保证金效果很好)检测。我将此与mouseout事件结合使用)

var mouseNearWindowEdge = function(e) { 
     var gap = 15;  
     var mp = { x: e.pageX-window.pageXOffset, y: e.pageY-window.pageYOffset }; 
     if (mp.x<gap || mp.y<gap || mp.x>window.innerWidth-gap || mp.y>window.innerHeight-gap) return true; 
     return false; 
    }; 

在mousemove上添加事件侦听器并调用该函数。

相关问题