Spec-Zone.ru › Web APIs

Элемент: метод requestPointerLock()

Ограниченная доступность

Эта функция не является базовой, так как она не работает во всех наиболее распространённых браузерах.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Метод requestPointerLock() интерфейса Element позволяет асинхронно затребовать захват указателя на заданном элементе.

Для отслеживания успеха или неудачи запроса необходимо прослушивать события pointerlockchange и pointerlockerror на уровне Document.

Примечание: В текущей спецификации requestPointerLock() сообщает об успехе или неудаче запроса только путём вызова событий pointerlockchange или pointerlockerror. Предлагаемое обновление спецификации обновляет requestPointerLock() для возвращения Promise, который сообщает об успехе или неудаче. Эта страница документирует версию, которая возвращает Promise. Однако обратите внимание, что эта версия ещё не является стандартом и не реализована во всех браузерах. Для получения дополнительной информации см. Совместимость с браузерами.

Синтаксис

requestPointerLock()
requestPointerLock(options)

Параметры

options Необязательно

Объект опций, который может содержать следующие свойства:

unadjustedMovement Необязательно

Отключает корректировку ускорения мыши на уровне операционной системы и вместо этого получает исходные данные ввода мыши. Значение по умолчанию — false; установка значения в true отключит ускорение мыши.

Значение возврата

Promise, который разрешается значением undefined.

Безопасность

Временная активация требуется при вызове requestPointerLock(). Пользователь должен взаимодействовать со страницей или элементом пользовательского интерфейса для работы этой функции. Кроме того, связанный документ целевого элемента должен быть в активном состоянии.

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

Если вызывать requestPointerLock() с requestFullscreen(), то requestPointerLock() необходимо вызвать в первую очередь, потому что requestFullscreen() использует состояние временной активации.

Токен allow-pointer-lock песочницы необходимо добавить при вызове requestPointerLock() в элементе <iframe>. Кроме того, ни один другой элемент в других элементах <iframe> не может находиться в режиме захвата указателя.

Примеры

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

Для включения захвата указателя пользователю нужно каким-либо образом взаимодействовать с пользовательским интерфейсом, например, нажав кнопку или сам игровой холст.

canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock();
});

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

Чтобы отключить ускорение мыши на уровне операционной системы и получить исходные данные ввода мыши, можно установить значение unadjustedMovement в true:

canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock({
    unadjustedMovement: true,
  });
});

Дополнительные примеры кода см. в:

  • демонстрация захвата указателя (посмотреть исходный код)
  • API захвата указателя
  • Отключение ускорения мыши для повышения производительности в играх FPS

Спецификации

Спецификация
Pointer Lock 2.0
# dom-element-requestpointerlock

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
requestPointerLock
37С версии 92 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
22–38
13С версии 92 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
5014–50
24С версии 78 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
15–25
10.1
37С версии 92 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
25–38
5014–50
24С версии 65 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
14–25
Нет
3.0С версии 16 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
1.5–3.0
37С версии 92 возвращает промис вместо undefined. Поведение соответствует предлагаемому изменению спецификации.
4.4–38
options_unadjustedMovement_parameter
88Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
88Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
Нет
74Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
Нет
88Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
Нет
63Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
Нет
15.0Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.
88Поддерживается на macOS Catalina 10.15.1+ и Windows. Пока не поддерживается на Linux.

См. также

  • Document.pointerLockElement
  • Document.exitPointerLock()
  • Захват указателя

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/requestPointerLock

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API