Summary

  • Первый публичный проект Pointer Lock в 2012 году предложил скрывать системный курсор, направлять события одному элементу и передавать игре относительное движение мыши без остановки у края экрана.
  • Рекомендация W3C 2016 года требует постоянно доступного способа разблокировки; для клавиатуры советуют Esc. После такого выхода по воле человека страница должна дождаться нового действия, прежде чем снова забрать мышь.

Попробуйте развернуть камеру игры от первого лица обычным курсором. Рука идёт вправо, но стрелка ударяется о рамку монитора и вид останавливается. Трёхмерную модель тоже неудобно вращать, когда перетаскивание заканчивается посередине. Первый публичный проект W3C от мая 2012 года предложил эффектный приём: спрятать курсор системы, отдать события мыши выбранному элементу и сообщать перемещение вместо координаты, упирающейся в край. Экран остался прежним, а виртуальная комната стала поворачиваться без границы.

Это не длинное перетаскивание. Обычный захват мыши прекращается после отпускания кнопки. Pointer Lock сохраняется без нажатой кнопки и не требует видимого адреса для указателя. movementX и movementY передают разницу между движениями; экранные координаты стоят на месте. Герой получает шею, которая поворачивается, вместо стрелки, стучащейся в обои.

У фокуса появилась цена. Спрятанный курсор и единая цель для событий затрудняют доступ к кнопкам браузера и соседним окнам. Раздел безопасности проекта 2012 года предупреждал о странице, которая снова и снова хватает мышь сразу после побега пользователя. Браузеру понадобился выход, который сама страница не может запереть. Игра берёт мышь взаймы; хозяин вправе потребовать её назад.

Рекомендация W3C октября 2016 года установила условия. Стандартное действие для снятия блокировки должно быть доступно всегда; при наличии клавиатуры рекомендуют Esc. Блокировка завершается и тогда, когда удаляют целевой элемент или вкладка либо окно теряет фокус. pointerlockchange сообщает о перемене, pointerlockerror — о неудаче. Игра может вовремя вернуть обычное меню. В документе есть и замечание об увеличении экрана: при захваченной мыши точка увеличения должна оставаться достижимой с клавиатуры.

Самое тонкое правило касается второго захвата. Первый запрос и запрос после выхода через браузерное действие разблокировки требуют нового вовлечения человека, прежде чем сработает requestPointerLock(). Если приложение само вызывает exitPointerLock() ради меню, оно может вернуться без нового жеста. Выходы выражают разные решения. Человек говорит «хватит», игра всего лишь переключает режим. Если стереть эту разницу, Esc станет вращающейся дверью с табличкой «выход».

Проект Pointer Lock 2.0 февраля 2026 года описывает unadjustedMovement: там, где платформа позволяет, приложение запрашивает движение без ускорения операционной системы. Запрос возвращает Promise. Для точного прицеливания одна и та же физическая рука не должна поворачивать камеру на разный угол из-за ускорения. Документ также разбирает короткое пользовательское разрешение на действие и порядок запросов блокировки и полного экрана. История публикаций W3C для 2.0 тянется с 2016 по 2026 год. Исчезновение маленькой стрелки оказалось большой темой.

Теперь игрок оглядывает всю виртуальную комнату, не натыкаясь на рамку. Потом хочет отдохнуть и возвращает мышь на настоящий рабочий стол. Удача Pointer Lock в том, что работают обе части: движение без края для игры и настоящий выход для человека.