Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索事件处理程序外部的鼠标位置_Javascript_Dom_Mouse - Fatal编程技术网

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

Javascript 检索事件处理程序外部的鼠标位置,javascript,dom,mouse,Javascript,Dom,Mouse,如何在鼠标的已分配事件处理程序函数之外检索鼠标位置 例如,如果Event.MOUSEMOVE=somefuction,我该如何说 someOtherFunction( maybeSomeParams ) { getCurrentMouseLocn(); } 或 最简单的方法是捕获鼠标移动事件并将位置保存到全局变量 如果已捕获,您可以执行以下操作: var oldFunction = document.onmousemove; document.onmousemove = functio

如何在鼠标的已分配事件处理程序函数之外检索鼠标位置

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

someOtherFunction( maybeSomeParams )
{
    getCurrentMouseLocn();
}


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

如果已捕获,您可以执行以下操作:

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

    return oldFunction(e);
}

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

$('#example').click(function(e){
   var x = e.pageX;
   var y = e.pageY;
   // ...
});
更多信息请点击此处:
这会有所帮助。否则,请使用mousemove事件将最新位置x/y存储在全局变量中。

不幸的是,无法在事件处理程序外部检索鼠标光标的位置。您可以选择为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
变量中包含的值可能并不总是最新的。

Ooh,你说得对!我没有完全理解这个问题。在这种情况下,一种方法是使用全局变量。
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);