确定事件外部的鼠标位置(使用jQuery)?

确定事件外部的鼠标位置(使用jQuery)?,jquery,event-handling,mouse,position,Jquery,Event Handling,Mouse,Position,我需要使用(最好)jQuery获得鼠标的绝对位置/坐标(X和Y),就像在任何JavaScript事件中一样,但不在任何JavaScript事件中。谢谢。不可能。但是,您可以在教程中使用相同的方法将位置存储在全局变量中,并在事件外部读取它 像这样: jQuery(document).ready(function(){ $().mousemove(function(e){ window.mouseXPos = e.pageX; window.mouseYPos = e.

我需要使用(最好)jQuery获得鼠标的绝对位置/坐标(X和Y),就像在任何JavaScript事件中一样,但不在任何JavaScript事件中。谢谢。

不可能。但是,您可以在教程中使用相同的方法将位置存储在全局变量中,并在事件外部读取它

像这样:

jQuery(document).ready(function(){
   $().mousemove(function(e){
      window.mouseXPos = e.pageX;
      window.mouseYPos = e.pageY;
   }); 
})

现在,您可以在任何地方使用
window.mouseXPos
window.mouseYPos

这是作为一个注释开始的,但我意识到它也值得作为一个答案发布:

我会小心使用文档级别,始终运行
mousemove
事件,即使只轮询光标位置。这需要大量处理,可能会使任何浏览器陷入困境,尤其是像IE这样速度较慢的浏览器

这样的问题几乎肯定会引发设计决策的问题:如果不需要处理鼠标事件来轮询光标位置,那么您真的需要光标位置吗?有没有更好的方法来解决你想解决的问题


编辑:即使在Safari 4中(轻描淡写)速度非常快,这一个
mousemove
事件也会使我与教程页面的每次交互都明显地起伏不定。考虑一下这将如何影响用户对您的站点或应用程序的看法。

此功能将通过每隔一段时间获取鼠标位置来减少对UI性能的影响:

function getMousePosition(timeoutMilliSeconds) {
    // "one" attaches the handler to the event and removes it after it has executed once 
    $(document).one("mousemove", function (event) {
        window.mouseXPos = event.pageX;
        window.mouseYPos = event.pageY;
        // set a timeout so the handler will be attached again after a little while
        setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds);
    });
}

// start storing the mouse position every 100 milliseconds
getMousePosition(100);
正如在另一个答案中“您现在可以在任何地方使用
window.mouseXPos
window.mouseYPos
。”


由于在间隔期间无法检测到鼠标移动,您会失去一点准确性。

我尝试了@Chetan Sastry的解决方案,但它不起作用。(我使用的是jQuery 1.6.4)。我更改代码,然后现在就开始工作。这是我的密码。我希望这会有所帮助



    $(document).ready(function(){
       $(document).mousemove(function(e){
          window.mouseXPos = e.pageX;
          window.mouseYPos = e.pageY;
       }); 
    });


这是jQuery还是JavaScript限制?@pbz这是JavaScript限制。我刚刚设置了一个jQuery.one('mousemove',function(){});为此目的。用setTimeout延迟它,下次移动时捕捉鼠标位置,瞧,你应该避免使用类似eval的结构。它们的效率较低,并且存在潜在的安全风险<代码>设置超时(函数(){getMousePosition(TimeOutMillistics)},TimeOutMillistics)已验证。此更改还修复了jQuery 1.4.4中的错误。始终会生成鼠标事件。也就是说,当鼠标移动时,浏览器将计算(通过本机代码)一个鼠标事件,最多执行JS回调函数,但不包括执行JS回调函数;它是所有与鼠标相关的事件侦听器的基础。很简单,除了通过
document.onmousemove
之外,浏览器没有提供公开这些信息的一般礼貌。就我而言,这是ES5/ES6的短视。事实上,轮询鼠标位置可以简化“onmousemove”事件的反弹跳,例如当鼠标移动DOM元素时。它会自己计算,但它不会计算mousemove事件和所有依赖它的事件,除非有人订阅它。这是很有道理的。