我已经将焦点监听器附加到窗口(使用原型语法):
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。
我认为焦点事件会有鼠标位置信息。
答案 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);
};