41

我需要在本教程中使用(最好)jQuery 来获取绝对鼠标位置/坐标(X 和 Y),但在任何 JavaScript 事件之外。谢谢你。

4

4 回答 4

48

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

像这样:

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

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

于 2009-07-15T20:33:29.313 回答
29

这开始是对Chetan Sastry 的回答的评论,但我意识到它也可能值得作为答案发布:

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

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

编辑:即使在(轻描淡写)非常快的 Safari 4 中,单个mousemove事件也会使与该教程页面的每次交互对我来说都明显不稳定。想想这将如何影响用户对您的网站或应用程序的看法。

于 2010-01-13T15:57:44.273 回答
10

此函数将通过仅以一定间隔获取鼠标位置来减少对 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.mouseXPoswindow.mouseYPos任何地方使用。”

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

于 2011-05-16T13:14:57.497 回答
2

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



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

于 2012-07-24T03:17:14.747 回答