Spec-Zone.ru › Web APIs

API виртуальной клавиатуры

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

Эта функция не относится к стандарту Baseline, поскольку она не работает в некоторых из самых популярных браузеров.

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

Экспериментальная функция: Это экспериментальная технология
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.

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

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

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

Two devices, one without a virtual keyboard, showing that the webpage can use most of the device's vertical space, and one with a virtual keyboard, showing that the webpage can only be displayed in the remaining space

Более сложные приложения или конкретные устройства, такие как мобильные телефоны с несколькими экранами, могут потребовать большего контроля над макетом при появлении виртуальной клавиатуры.

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

A dual-screen device, with its virtual keyboard displayed on one screen, showing that the webpage can only use the vertical space that remains after the keyboard was displayed, even if that leaves empty space on the other screen

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

Концепция

API виртуальной клавиатуры состоит из трех частей:

  • Интерфейс VirtualKeyboard, к которому можно получить доступ через navigator.virtualKeyboard, используется для отказа от автоматического поведения виртуальной клавиатуры, программного отображения или скрытия виртуальной клавиатуры, а также получения текущего положения и размера виртуальной клавиатуры.
  • Переменные окружения CSS keyboard-inset-* предоставляют информацию о положении и размере виртуальной клавиатуры.
  • Атрибут virtualkeyboardpolicy определяет, должно ли отображаться виртуальная клавиатура на элементах contenteditable.

Отказ от автоматического поведения виртуальной клавиатуры

Чтобы отказаться от автоматического поведения виртуальной клавиатуры браузера, используйте navigator.virtualKeyboard.overlaysContent = true. Браузер больше не будет автоматически изменять размер области просмотра для выделения места под виртуальную клавиатуру, которая вместо этого будет накладываться поверх вашего контента.

Обнаружение геометрии виртуальной клавиатуры с помощью JavaScript

После отказа от стандартного поведения браузера вы можете получить текущую геометрию виртуальной клавиатуры, используя navigator.virtualKeyboard.boundingRect, и соответствующим образом адаптировать макет с помощью CSS и JavaScript. Кроме того, вы можете прослушивать изменения геометрии, такие как отображение или скрытие клавиатуры, с помощью события geometrychange.

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

В приведенном ниже фрагменте кода событие geometrychange используется для определения изменения геометрии виртуальной клавиатуры; затем он получает доступ к свойству boundingRect для запроса размера и положения виртуальной клавиатуры:

if ("virtualKeyboard" in navigator) {
  navigator.virtualKeyboard.overlaysContent = true;

  navigator.virtualKeyboard.addEventListener("geometrychange", (event) => {
    const { x, y, width, height } = event.target.boundingRect;
  });
}

Обнаружение геометрии виртуальной клавиатуры с помощью переменных окружения CSS

API виртуальной клавиатуры также предоставляет следующие переменные окружения CSS: keyboard-inset-top, keyboard-inset-right, keyboard-inset-bottom, keyboard-inset-left, keyboard-inset-width, и keyboard-inset-height.

Переменные окружения CSS keyboard-inset-* полезны для адаптации макета к отображению виртуальной клавиатуры с помощью CSS. Они определяют прямоугольник по отступам сверху, справа, снизу и слева от края области просмотра. Переменные width и height также доступны при необходимости.

В приведенном ниже фрагменте кода используется переменная CSS keyboard-inset-height для выделения места для отображения виртуальной клавиатуры под списком сообщений и полем ввода в приложении типа чата. При скрытии виртуальной клавиатуры функция env() возвращает 0px, и область сетки keyboard скрывается. Элементы сообщений и ввода могут занимать всю высоту области просмотра. При отображении виртуальной клавиатуры область сетки keyboard получает высоту виртуальной клавиатуры.

<style>
  body {
    display: grid;
    margin: 0;
    height: 100vh;
    grid-template:
      "messages" 1fr
      "input" auto
      "keyboard" env(keyboard-inset-height, 0px);
  }
</style>
<ul id="messages"></ul>
<input type="text" />
<script>
  if ("virtualKeyboard" in navigator) {
    navigator.virtualKeyboard.overlaysContent = true;
  }
</script>

Управление виртуальной клавиатурой на элементах contenteditable

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

Установите атрибут virtualkeyboardpolicy в значение manual для предотвращения стандартной обработки виртуальной клавиатуры в браузере и для обработки её самостоятельно, используя интерфейс VirtualKeyboard и методы show() и hide().

В приведенном ниже фрагменте кода показано, как использовать атрибут virtualkeyboardpolicy и метод navigator.virtualKeyboard.show() для отображения виртуальной клавиатуры при двойном щелчке:

<div contenteditable virtualkeyboardpolicy="manual" id="editor"></div>
<script>
  if ("virtualKeyboard" in navigator) {
    navigator.virtualKeyboard.overlaysContent = true;

    const editor = document.getElementById("editor");
    editor.addEventListener("dblclick", () => {
      navigator.virtualKeyboard.show();
    });
  }
</script>

Интерфейсы

VirtualKeyboard Экспериментальная

Предоставляет функции, которые извлекают карты макета клавиатуры и переключают захват нажатий клавиш с физической клавиатуры.

Расширения для других интерфейсов

Navigator.virtualKeyboard Только для чтения Экспериментальная

Возвращает ссылку на API VirtualKeyboard для взятия под контроль виртуальной клавиатуры.

HTMLElement.virtualkeyboardpolicy Экспериментальная

Строка, указывающая, следует ли использовать стандартную политику браузера для отображения виртуальной клавиатуры при фокусировке на элементе или обрабатывать отображение виртуальной клавиатуры вручную.

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

Спецификация
API виртуальной клавиатуры
# the-virtualkeyboard-interface

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

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
VirtualKeyboard_API 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94
boundingRect 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94
geometrychange_event 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94
hide 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94
overlaysContent 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94
show 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94

См. также

  • Полный контроль с помощью API VirtualKeyboard

© 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/VirtualKeyboard_API

Spec-Zone.ru

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