Spec-Zone.ru › Web APIs

Интерфейс вибрации

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

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

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

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

Концепции и использование

Вибрация описывается как последовательность импульсов включения/выключения различной длительности. Шаблон может состоять либо из одного целого числа, описывающего количество миллисекунд вибрации, либо из массива целых чисел, описывающих последовательность вибраций и пауз. Управление вибрацией осуществляется с помощью единственного метода: Navigator.vibrate().

Единичная вибрация

Вы можете вызвать вибрацию один раз, указав либо одно значение, либо массив, содержащий только одно значение:

navigator.vibrate(200);
navigator.vibrate([200]);

Оба этих примера вибрируют устройство на 200 мс.

Шаблоны вибрации

Массив значений описывает чередующиеся периоды вибрации и пауз устройства. Каждое значение в массиве преобразуется в целое число и затем интерпретируется как количество миллисекунд вибрации и количество миллисекунд паузы. Например:

navigator.vibrate([200, 100, 200]);

Это вибрирует устройство в течение 200 мс, затем делает паузу в 100 мс, прежде чем вибрировать снова на 200 мс.

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

Отмена текущих вибраций

Вызов Navigator.vibrate() со значением 0, пустым массивом или массивом, содержащим только нули, отменит любой текущий шаблон вибрации.

Продолжительные вибрации

Некоторые базовые setInterval и clearInterval действия позволят вам создавать постоянную вибрацию:

let vibrateInterval;

// Starts vibration at passed in level
function startVibrate(duration) {
  navigator.vibrate(duration);
}

// Stops vibration
function stopVibrate() {
  // Clear interval and stop persistent vibrating
  if (vibrateInterval) clearInterval(vibrateInterval);
  navigator.vibrate(0);
}

// Start persistent vibration at given duration and interval
// Assumes a number value is given
function startPersistentVibrate(duration, interval) {
  vibrateInterval = setInterval(() => {
    startVibrate(duration);
  }, interval);
}

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

Интерфейсы

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

Navigator.vibrate()

Вызывает вибрацию на устройствах, поддерживающих ее. Если вибрация не поддерживается, ничего не делает.

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

Спецификация
API вибрации

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
Vibration_API 32 79
16–129["До Firefox 26 включительно, если шаблон вибрации был слишком длинным или любой из его элементов слишком большим, Firefox выбрасывал исключение вместо возвращения false (bug 884935).", "Начиная с Firefox 32, если шаблон вибрации слишком длинный или любой из его элементов слишком большой, он возвращает true, но обрезает шаблон (bug 1014581).", "Начиная с Firefox 72, это не поддерживается в фреймах с разных доменов."]
11–16
19 Нет
32["Начиная с Chrome 55, это не поддерживается в фреймах с разных доменов.", "Начиная с Chrome 60, этот метод требует пользовательского действия. В противном случае возвращается false."]
79Вибрация отключена. Если окно видимо, то navigator.vibrate() возвращает true, но вибрации не происходит (независимо от аппаратной поддержки). Изначально это должно было быть отключено только для фреймов с разных доменов (bug 1591113), но из-за проблем с злоупотреблением, функция не была повторно включена (bug 1653318).
16–79["До Firefox 26 включительно, если шаблон вибрации был слишком длинным или любой из его элементов слишком большим, Firefox выбрасывал исключение вместо возвращения false (bug 884935).", "Начиная с Firefox 32, если шаблон вибрации слишком длинный или любой из его элементов слишком большой, он возвращает true, но обрезает шаблон (bug 1014581)."]
14–16
19["Начиная с Opera 42, это не поддерживается в фреймах с разных доменов.", "Начиная с Opera 47, этот метод требует пользовательского действия. В противном случае возвращается false."]
Нет
2.0["Начиная с Chrome 55, это не поддерживается в фреймах с разных доменов.", "Начиная с Chrome 60, этот метод требует пользовательского действия. В противном случае возвращается false."]
4.4.3["Начиная с версии 55, это не поддерживается в фреймах с разных доменов.", "Начиная с версии 60, этот метод требует пользовательского действия. В противном случае возвращается false."]

См. также

  • Navigator.vibrate()

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

Spec-Zone.ru

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