Элемент: метод requestPointerLock()
Ограниченная доступность
Эта функция не является базовой, так как она не работает во всех наиболее распространённых браузерах.
Метод requestPointerLock() интерфейса Element позволяет асинхронно затребовать захват указателя на заданном элементе.
Для отслеживания успеха или неудачи запроса необходимо прослушивать события pointerlockchange и pointerlockerror на уровне Document.
Примечание: В текущей спецификации requestPointerLock() сообщает об успехе или неудаче запроса только путём вызова событий pointerlockchange или pointerlockerror. Предлагаемое обновление спецификации обновляет requestPointerLock() для возвращения Promise, который сообщает об успехе или неудаче. Эта страница документирует версию, которая возвращает Promise. Однако обратите внимание, что эта версия ещё не является стандартом и не реализована во всех браузерах. Для получения дополнительной информации см. Совместимость с браузерами.
Синтаксис
requestPointerLock() requestPointerLock(options)
Параметры
optionsНеобязательно-
Объект опций, который может содержать следующие свойства:
unadjustedMovementНеобязательно-
Отключает корректировку ускорения мыши на уровне операционной системы и вместо этого получает исходные данные ввода мыши. Значение по умолчанию —
false; установка значения вtrueотключит ускорение мыши.
Значение возврата
Безопасность
Временная активация требуется при вызове 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,
});
});
Дополнительные примеры кода см. в:
Спецификации
| Спецификация |
|---|
| 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. Поведение соответствует предлагаемому изменению спецификации. |
13С версии 92 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
5014–50 |
24С версии 78 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
10.1 |
37С версии 92 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
5014–50 |
24С версии 65 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
Нет |
3.0С версии 16 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
37С версии 92 возвращает промис вместоundefined. Поведение соответствует предлагаемому изменению спецификации. |
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. |
См. также
© 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