Захватывать позицию мыши за пределами окна браузера? - PullRequest
2 голосов
/ 22 ноября 2011

Одним из основных препятствий на пути создания захватывающих впечатлений в браузере (с использованием WebGL и аналогичных) является набор ограничений, накладываемых на управление мышью.

Например, схема управления шутером от первого лица, по сути, требует, чтобы программа схватила мышь и перецентрировала ее так, чтобы обеспечить бесконечное перемещение курсора в любом направлении.Это нет-нет, потому что это дало бы веб-программисту слишком большой контроль.Надеюсь, однажды мы увидим плагин, который позволяет сайту запрашивать разрешение на перемещение мыши, чтобы разрешить такое поведение.

Однако я думаю, что есть несколько способов улучшить ситуацию, не заходя так далеко.Мне интересно, можно ли разрешить доступ к положению мыши, когда мышь уходит из окна (фокус все еще на окне)?

Я играл в эту игру с помощью Google Chrome: http://www.chromeexperiments.com/detail/x-wing/?f=

, и моя самая большая проблема заключалась в том, что чтобы добраться до угла, я должен осторожно держать мышь в углу окна браузера.,Если я оттолкну его от окна, мой корабль останется там, где находилась последняя позиция мыши, что не совсем в углу.И я бы врезался в стену.

Чтобы сделать это лучше, браузер должен иметь возможность получать обновления мыши, когда мышь находится за пределами окна.В контексте игры такого типа, если мышь покидает окно, она должна продолжать отправлять обновленные позиции в браузер.

Есть ли какое-либо положение для этого?

Ответы [ 4 ]

1 голос
/ 15 июля 2013

setCapture() делает свое дело.Рабочий пример здесь .

1 голос
/ 03 января 2013

Подсказка:

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

 function doc_mouse_up(e) {
                        e.target.releaseCapture();
}
0 голосов
/ 30 ноября 2011

Чтобы ответить на ваш вопрос, нет, вы не можете получать события мыши за пределами окна (включая его положение).

Существует Mouse Lock API , который разработан специально для описанного вами случая. Блокирует курсор на текущее окно. Поддержка практически не существует сейчас, но однажды ..!

0 голосов
/ 30 ноября 2011

Это действительно кажется гораздо более серьезной проблемой безопасности, чем позволить разработчику переместить курсор.Ответ - нет, такого нет.И, вероятно, никогда не будет.Извините!

Обновление : Я, конечно, говорил о захвате за пределами окна, который может стать проблемой.Весьма вероятно, что когда-нибудь будет API, который блокирует мышь, возможно, после запроса разрешения пользователя.Как отметил Никф, они уже работают над этим - https://www.w3.org/TR/pointerlock/

Исходная ссылка на несуществующую страницу - http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...