如何在其指定的事件处理函数之外检索鼠标位置
例如,如果Event.MOUSEMOVE = somefuction
,我该怎么说...
someOtherFunction( maybeSomeParams )
{
getCurrentMouseLocn();
}
或
someOtherFunction( maybeSomeParams )
{
mouseXLocn = ?;
mouseYLocn = ?;
}
答案 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存储在全局变量中。