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

  • Tutorial
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?

Only registered users can participate in poll. Log in, please.

Что вы думаете о Vibration API?

  • 18.7%Это абсолютно бессмысленная технология.75
  • 44.1%Возможно это кому-то и пригодиться, но в тех проектах, которыми я занимаюсь, места этой технологии нет.176
  • 25.5%Пожалуй, я найду пару узких применений этой технологии в тех проектах, которыми я занимаюсь.102
  • 8%Мне понравилось, теперь буду регулярно использовать эту технологию.32
  • 3.5%Тем или иным образом я использую Vibration API уже несколько лет и всё это для меня не новость.14
Share post

Similar posts

Comments 23

    +6
    Эй, человек, который проголосовал, что ему понравилось, и он будет регулярно использовать Vibration API, расскажи, где и как ты это будешь применять? Нам же всем интересно. :-)
      +22
      image
        0
        спрятали бы вы под спойлер, забанят же ведь
      +2
      Вибрировать может мыш
        0
        А вы уверены, что после подключения вибрирующей мыши у вас в десктопном браузере сразу прорежется navigator.vibrate()?
          0
          Нынче Windows на мобильных и десктопах есть значит vibrate будет и в десктопных раузерах. API есть а чему вибрировать это уже второй вопрос.
            0
            осталось дождаться интернета вещей и можно будет вибрировать микроволновкой :)
            0
            А почему нет? Не сразу, конечно. Это, по сути, главный вопрос реализации рекомендаций разработчиками обозревателей: «Как отобразить API на операционную систему и железки конкретного пользователя?». Качество реализации различных API как раз и позволяет приблизить веб-приложения к нативным, сделать интеграцию с ОС более гладкой.

            Ещё можно сравнить API с моделью, а реализации с представлениями — в зависимости от среды будет задействоваться разное «представление». Вот пример: таблицы. В графическом браузере они будут прорисовываться с помощью графических примитивов, голосовой может проговаривать столбцы и содержимое построчно, а текстовый может попытаться нарисовать рамки псевдографикой.

            Короче, если мышь может вибрировать, то почему бы её не задействовать. По мне, так это прямой аналог вибрации мобильного устройства.
          +3
          %каммент про порносайты%
            +3
            Консорциум Всемирной паутины

            Слово «web» из названия «World Wide Web Consortium» перевели как паутина недалёкие люди на заре интернета. У нас 2015 год, это Консорциум всемирной сети — и неважно, что об этом говорит Википедия. Если только вы не человек-паук.
              +3
              Всё-таки традиционность перевода тоже кое-что значит, если только вы не человек-амфибия? ;-)
                0
                Здесь ещё играет роль распространённость: в 90% случаев это просто W3C — и всем всё сразу понятно. А для редких случаев лучше выбрать что-нибудь, что не звучит абсурдно.
              +1
              navigator.vibrate([1000, 500, 1000]);

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


              Перемудрили, пришлось перечитать несколько раз :) Из-за того, что индексы массива начинаются с нуля, первый элемент не перестаёт быть первым :)
                +5
                Мда. Мало того, что рекламные флеш-ролики внезапно начинают орать непойми из какой вкладки — так теперь еще и вибрировать смогут. Прелестно.
                  0
                  Да-да, первое, о чем подумал.
                    0
                    В спеке есть такие строки:
                    …an implementation might abort the algorithm because the user has set a preference indicating that pages at a given origin should never be able to vibrate the device…
                    Будем надеяться, разработчики браузеров дадут возможность настройки.
                      0
                      … pages at a given origin should never be able to vibrate the device


                      Даже не знаю. Здесь больше бы подошел white-list, чем black-list, по-моему.
                        0
                        Это не противоречит спеке. Возможно, будет поддержка вайлдкардов и отрицаний, тогда запишем правила так: [*.*; !habrahabr.ru].
                    0
                    Не хватает возможности управлять силой (частотой) вибрации. По моему некоторые телефоны могут вибрировать с разной силой.
                      0
                      Надо экспериментировать и подбирать, но, как мне кажется, определённого эффекта можно добиться путём изменения паузы между повторяющимися толчками. Типа зацикленный
                      navigator.vibrate([100, 50]);
                      будет создавать эффект более слабой вибрации, чем
                      navigator.vibrate([125, 25]);
                        0
                        Когда-то нокия так умела.
                        0
                        Ну, не считая порносайтов…
                        Было бы классно, если бы это работало (только) в сочетании с gamepad api.
                          0
                          Копипаст отсюда html5.by/blog/vibration-api/

                          Only users with full accounts can post comments. Log in, please.