确定窗口焦点事件上的鼠标位置

时间:2009-11-08 17:57:50

标签: javascript javascript-events

我已经将焦点监听器附加到窗口(使用原型语法):

Event.observe( window, 'focus', focusCb.bindAsEventListener( this ) );

我想确定窗口聚焦时的鼠标位置。不幸的是,在我的focusCb方法中,我似乎无法访问pageX,pageY,clientX或clientY。

使用quirksmode代码:

function doSomething(e) {
    var posx = 0;
    var posy = 0;
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)     {
        posx = e.pageX;
        posy = e.pageY;
    }
    else if (e.clientX || e.clientY)    {
        posx = e.clientX + document.body.scrollLeft
            + document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop
            + document.documentElement.scrollTop;
    }

    // posx and posy contain the mouse position relative to the document
    // Do something with this information
}

我总是得0,0。

我认为焦点事件会有鼠标位置信息。

  1. 为什么焦点事件没有这个信息?
  2. 更重要的是,当窗口聚焦时,我应该如何获得鼠标位置?

4 个答案:

答案 0 :(得分:1)

IE在event object中有clientX和clientY;虽然它可能是唯一的一个。

是的,这看起来非常可怕。请参阅有关鼠标位置的this page部分。我认为他的检查工作非常彻底。

好的,我看到你实际上已经在使用他的剧本了。叹息。

答案 1 :(得分:1)

根据具体情况,它可能不完全是你想要的,但你可以在焦点之后等待下一个mousemove事件并使用那个坐标,就像这一行:

var x = 0, y = 0, window_got_focus = false;
window.onfocus = function () { window_got_focus = true };
document.onmousemove = function (event) {
  if (window_got_focus) {
    window_got_focus = false;
    x = event.clientX;
    y = event.clentY;
  }
};

当然,缺点是只有用户在聚焦后移动鼠标才能获得坐标。

答案 2 :(得分:0)

您可以捕获窗口onclick事件并将该位置放入全局范围的变量中。

编辑:此外,如果您正在使用原型,您应该可以访问事件对象的pointerX和pointerY方法。

答案 3 :(得分:0)

在鼠标移动时调用 doSomething()功能

document.onmousemove = function (e) 
{
  doSomething(e);
};