检索事件处理程序之外的鼠标位置

时间:2009-05-09 22:15:37

标签: javascript dom mouse

如何在其指定的事件处理函数之外检索鼠标位置

例如,如果Event.MOUSEMOVE = somefuction,我该怎么说...

someOtherFunction( maybeSomeParams )
{
    getCurrentMouseLocn();
}

someOtherFunction( maybeSomeParams )
{
    mouseXLocn = ?; 
    mouseYLocn = ?;
}

3 个答案:

答案 0 :(得分:1)

最简单的方法是捕获鼠标移动事件并将位置保存到全局变量。

如果它已经被捕获,你可以这样做:

var oldFunction = document.onmousemove;
document.onmousemove = function(e)
{
    // save x & y here...

    return oldFunction(e);
}

答案 1 :(得分:1)

不幸的是,无法在事件处理程序之外检索鼠标光标的位置。您有一个选择是为onmousemove事件注册事件处理程序并将坐标存储在全局(ish)变量中。

使用普通的旧javascript,下面的代码应该可以解决Safari和FF3的问题。

var coords = {x: NaN, y: NaN};

...

if (coords.x === ... && coords.y === ...) {
   /* insert your magic here */
}

...

window.addEventListener('mousemove', function(e) { 
    coords.x = e.clientX;
    coords.y = e.clientY;
}, true);

简而言之,为“onmousemove”事件注册了一个事件监听器(处理程序)。当事件触发时,将使用该事件调用匿名函数。该事件包含多个属性,其中两个是clientX和clientY。这些是鼠标相对于窗口的坐标,而不是文档的顶部。这些坐标放在一个变量中,该变量可供处理程序和需要坐标的代码访问。这可能是某种全局变量或封闭变量。

我应该注意,浏览器中的javascript实现通常是单线程的。简单地说,这意味着如果自上次调用事件处理程序后鼠标已移动,coords变量中包含的值可能并不总是最新的。

答案 2 :(得分:0)

使用jQuery,您可以在任何事件中使用鼠标位置:

$('#example').click(function(e){
   var x = e.pageX;
   var y = e.pageY;
   // ...
});

此处有更多信息:http://docs.jquery.com/Tutorials:Mouse_Position 这可以帮助。否则,使用mousemove事件将最新位置x / y存储在全局变量中。