捕获浏览器窗口之外的鼠标位置?

时间:2011-11-22 11:50:46

标签: javascript browser mouseevent

在浏览器中创建沉浸式体验(使用WebGL等)的一个主要障碍是鼠标控制的一系列限制。

例如,第一人称射击控制方案基本上要求程序抓住鼠标并使其重新居中,以便允许在光标的任何方向上无限移动。这是禁忌,因为它会给网络程序员太多控制权。希望有一天我们会看到一个插件,允许站点请求允许移动鼠标以允许此行为。

但是我认为有一些方法可以在没有那么远的情况下改进。我想知道一旦鼠标离开窗口(焦点仍在窗口上)是否可以允许访问鼠标位置?

我正在使用谷歌浏览器玩这个游戏:http://www.chromeexperiments.com/detail/x-wing/?f=

我最大的问题是要到达角落,我必须小心地将鼠标放在浏览器窗口的一角。如果我将它推离窗户,我的船将停留在鼠标最后一个窗口位置的位置,这不是在角落里。我会撞到墙上。

为了做得更好,当鼠标在窗口外时,浏览器应该能够接收鼠标更新。在这种类型的游戏的上下文中,如果鼠标离开窗口,它应该继续向浏览器发送更新的位置。

这有什么规定吗?

4 个答案:

答案 0 :(得分:1)

提示:

 function thumb_mouse_down(e) {
                       e.target.setCapture();
                       return false;
                   }

 function doc_mouse_up(e) {
                        e.target.releaseCapture();
}

答案 1 :(得分:1)

setCapture()可以解决问题。工作example is here

答案 2 :(得分:0)

要回答你的问题,不,你不能从窗外获取鼠标事件(包括它的位置)。

Mouse Lock API,专门针对您描述的情况而设计。它将光标锁定到当前窗口。支持现在几乎不存在,但有一天......!

答案 3 :(得分:-1)

这似乎是一个比允许开发人员重新定位游标更大的安全问题。答案是否定的,没有这样的事情。而且可能永远不会有一个。遗憾!

更新:我当然是在讨论窗外的捕获问题。很可能在获得用户许可后,可能会有一个锁定鼠标的API。正如nickf指出的那样,他们已经在研究它了 - https://www.w3.org/TR/pointerlock/

原始已解散的链接 - http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html