有没有办法触发mousemove并获取event.pageX,event.pageY?

Geo*_*o P 24 javascript jquery javascript-events mouseevent

所以,就像问题指定的那样,有没有办法在jQuery中触发mousemove事件,它还将鼠标坐标发送到事件对象?

到目前为止,我的代码可以使用.trigger(事件)函数触发mousemove,但event.pageX和event.pageY是未定义的.

ten*_*dor 38

您需要设置pageXpageY触发事件之前直接.要设置这些属性,请创建一个jQuery.Event对象.

// create a jQuery event
e = $.Event('mousemove');

// set coordinates
e.pageX = 100;
e.pageY = 100;

// trigger event - must trigger on document
$(document).trigger(e);
Run Code Online (Sandbox Code Playgroud)

在jsFiddle中看到它.


dSq*_*red 2

我不相信可以通过 JavaScript / jQuery 按需获取鼠标坐标;但是,如果将位置绑定到全局变量,则可以在整个文档中随时访问它们,如下所示:

$(document).ready(function(){
   $().mousemove(function(e){
      window.xPos = e.pageX;
      window.yPos = e.pageY;
   }); 
});
Run Code Online (Sandbox Code Playgroud)

对于 CPU 密集程度较低的选项,您可以添加超时,尽管您会以性能为代价换取了解鼠标位置的轻微延迟:

function getMousePosition(timeoutMilliSeconds) {
    $(document).one("mousemove", function (event) {
        window.xPos = event.pageX;
        window.yPos = event.pageY;
        setTimeout("getMousePosition(" + timeoutMilliSeconds + ")", timeoutMilliSeconds);
    });
}
getMousePosition(100);
Run Code Online (Sandbox Code Playgroud)

您现在应该能够使用任一解决方案从文档中的任何位置访问 window.xPos 和 window.yPos,而无需触发虚假事件。

  • -1 这没有解决涉及手动触发事件的问题。 (9认同)
  • @geossj5 - 如果您已经在跟踪鼠标,并且鼠标不再移动,那么无论最后记录的坐标是什么,肯定仍然是这种情况......? (2认同)