代码之家  ›  专栏  ›  技术社区  ›  pbz

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

  •  38
  • pbz  · 技术社区  · 15 年前

    我需要使用(最好)jquery(如in)获取绝对鼠标位置/坐标(x和y)。 this tutorial 但在任何javascript事件之外。谢谢您。

    4 回复  |  直到 12 年前
        1
  •  45
  •   Chetan S    15 年前

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

    这样地:

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

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

        2
  •  29
  •   Community Maksym Gontar    7 年前

    这是作为对 Chetan Sastry's answer 但我意识到这也值得作为一个答案发表:

    我会小心保持文档级别,始终运行 mousemove 事件,即使您只是在轮询光标位置。这是一个大量的处理过程,可以使任何浏览器陷入困境,特别是像IE这样速度较慢的浏览器。

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

    编辑:即使在Safari 4中,这是(轻描淡写) 非常快 ,那个 移动鼠标 对于我来说,这个事件使得每次与教程页面的交互都显得异常曲折。想想这将如何影响用户对您的站点或应用程序的感知。

        3
  •  10
  •   Cogito    12 年前

    此函数将通过仅以间隔获取鼠标位置来降低对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 从任何地方。”

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

        4
  •  1
  •   Sword-Breaker    12 年前

    我已经尝试了@chetan sastry的soultion,但它不起作用(我使用的是jquery 1.6.4)。我修改了代码,然后现在开始工作。这是我的密码。我希望这会有所帮助。

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