2011-11-22 118 views
2

在浏览器中创建身临其境的体验(使用WebGL等)的一个主要障碍是放置在鼠标控制上的一系列限制。在浏览器窗口之外捕获鼠标位置?

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

但是我认为有些方法可以改善事情而不会走得太远。我想知道是否有可能允许鼠标离开窗口时访问鼠标位置(焦点仍然在窗口上)?

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

和我最大的问题是,得到一个角球,我必须慎重保管我的鼠标在浏览器窗口的角落。如果我把它从窗户上推下来,我的船就会停留在鼠标最后一个窗口位置的位置,这个位置并不在角落。我会撞到墙上。

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

有没有这方面的规定?

回答

0

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

更新:当然,我当时谈到了在窗口外捕获会是一个问题。可能在获得用户许可之后,很有可能会有一个锁定鼠标的API。正如nickf指出,他们已经工作了 - https://www.w3.org/TR/pointerlock/

原文链接倒闭 - http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html

+0

链接现在已损坏。但我最近玩过使用鼠标锁API的HTML5游戏,并且它在Chrome中运行得非常好。所以这很好 –

1

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

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

+0

大多数人想要的和我的建议之间的关键区别在于,我只想让浏览器从鼠标移动中获取更新。如果用户在浏览器窗口之外单击(取消激活它),默认行为很好,但我希望浏览器在仍然具有焦点**的情况下接收鼠标移动消息**。目前,即使浏览器具有焦点,如果将光标移到窗外,浏览器也会收到零输入。即使您单击并拖动,然后关闭。 –

1

一个提示:

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

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

你能不能描述一下setCapture()呢? –