Vibration API: кому и зачем это нужно?

в 21:17, , рубрики: api, html, IT-стандарты, javascript, Vibration API, w3c, Веб-разработка, вибрация, спецификации, метки:

10 февраля Консорциум Всемирной паутины объявил о том, что стандарт, описывающий API для управления вибрацией, получил статус рекомендованного. Сама по себе возможность заставить браузер повибрировать устройством была доступна уже некоторое время, но только сейчас она была наконец-то оформлена рекомендованной спецификацией, так что пришла пора подумать, как и где это можно использовать на повседневной основе. Впрочем, уже в самом начале авторы стандарта предупреждают, что API разработан специально для тех случаев, когда требуется простая тактильная обратная связь, и он не предназначен для использования в качестве общего механизма уведомления пользователя. Для уведомлений рекомендуется использовать Notifications API.

Желающие приобщиться к официальной спецификации со всеми её нюансами могут это сделать на сайте W3C, а здесь мы лишь бегло посмотрим на то, как всё это можно использовать, а также осветим некоторые моменты, не раскрытые в документации.

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

if («vibrate» in navigator) {
	// Вибрация
}

Непосредственно вибрация задаётся путём передачи navigator.vibrate её длительности в миллисекундах:

navigator.vibrate(1000);

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

navigator.vibrate([1000, 500, 1000]);

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

Процесс вибрации не является блокирующим, то есть код будет продолжать исполняться пока устройство вибрирует.

Если требуется прекратить вибрацию, то следует передать значение 0:

navigator.vibrate(0);

Или если больше нравится:

navigator.vibrate([]);

Передача нулевого значения сразу отменяет все ранее запущенные вибрации.

В принципе, это всё, что можно сказать об API для управления вибрацией на web-страницах. И теперь есть предложение провести мозговой штурм и вместе подумать относительно того, для чего всё это можно использовать. Для начала есть следующие идеи:

  • Использование вибрации в web-играх, например, дрожание устройства в гонках или при выстрелах.
  • Вибрационные оповещения при важном изменении на странице, например, когда в web-чате появляется новое сообщение.
  • Дублирование звуковых сигналов, если они присутствуют в интерфейсе, например, для обеспечения accessibility для пользователей с ограниченными возможностями слухового восприятия (как физические нарушения, так и просто отключённый звук на устройстве).
  • Просто добавление прикольных рюшечек в интерфейс, например, вибрационные толчки при нажатии кнопок на сайте.
  • Раздражающие и пугающие пользователя спец. эффекты, например, яростное вибрирование устройства при загрузке страницы, что будет вызывать примерно такой же негатив, как и неожиданно включающаяся музыка.

А теперь честно: кого и чем зацепили потенциальные возможности Vibration API?

Автор: Tseikovets

Источник

Поделиться

* - обязательные к заполнению поля