Интерфейс вибрации
Ограниченная доступность
Эта функция не относится к 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);
}
Конечно, приведенный выше фрагмент кода не учитывает массивный метод вибрации; для создания постоянной вибрации, основанной на массиве, необходимо рассчитать сумму элементов массива и создать интервал на основе этого значения (вероятно, с дополнительной задержкой).
Интерфейсы
Расширения других интерфейсов
-
Вызывает вибрацию на устройствах, поддерживающих ее. Если вибрация не поддерживается, ничего не делает.
Спецификации
| Спецификация |
|---|
| 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, это не поддерживается в фреймах с разных доменов."] |
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)."] |
19["Начиная с Opera 42, это не поддерживается в фреймах с разных доменов.", "Начиная с Opera 47, этот метод требует пользовательского действия. В противном случае возвращаетсяfalse."] |
Нет | 2.0["Начиная с Chrome 55, это не поддерживается в фреймах с разных доменов.", "Начиная с Chrome 60, этот метод требует пользовательского действия. В противном случае возвращаетсяfalse."] |
4.4.3["Начиная с версии 55, это не поддерживается в фреймах с разных доменов.", "Начиная с версии 60, этот метод требует пользовательского действия. В противном случае возвращаетсяfalse."] |
См. также
© 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