Vibration API

Vibration API

Embora ainda não seja possível provocar terremotos de escala geográfica, já podemos fazer dispositivos vibrar com HTML5. Entenda por dispositivo qualquer meio de acesso que possua um hardware específico que possibilite isso — como os dispositivos móveis, pois não faria o mínimo sentido seu computador vibrar (ou não?).

Muitas dessas novas APIs de acesso a dispositivos são focadas em utilidades mobile (assim como a Battery API), e eu diria que a Mozilla é a entidade que mais investe nessas especificações, pelo simples fato de que ela mantém o Firefox OS, cuja proposta é funcionar totalmente em cima dos padrões abertos da web.

Curiosidade

Originalmente, o nome dessa API seria Vibrator (vibrador), mas, por questões óbvias, preferiram mudar para Vibration. #tr00l

Uma API enorme

Essa API é tão extensa que dá até medo, eis a listagem de todas as suas propriedades e métodos:

Pronto. É isso. Já podemos ir pra praia? Sério, só tem esse método. Legal né? (aposto que tem muita gente comemorando agora.) De acordo com a spec, esse método recebe apenas um parâmetro que representa uma duração de tempo que o dispositivo deve permanecer vibrando.

navigator.vibrate(1000); // vibra por 1000ms (1s)

Esse parâmetro também pode ser uma lista representando um padrão de toques, onde cada item da lista alterna entre tempo de duração de uma vibração e tempo de duração de uma intervalo. Com um exemplo fica mais fácil de entender:

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

No trecho acima o dispositivo começará vibrando por 500ms, depois pausa por 1000ms, vibra novamente por 800ms, pausa por 500ms e termina vibrando por mais 1000ms.

Caso uma chamada de vibração já tenha sido disparada, também é possível cancelá-la passando um zero ou um array vazio como parâmetro.

navigator.vibrate(0); // cancela qualquer vibração em execução
navigator.vibrate([]); // mesma coisa que o anterior

Quer testar o suporte?

if('vibrate' in navigator){
    // tann namm!
}

Utilidades

Tá, mas o que faço com essa API? Bem, considerando que o mecanismo de vibração causa um simples feedback tátil, existem algumas utilidades que podem ser de interesse para uma aplicação móvel. As mais comuns são, por exemplo, alertar o usuário ao disparar uma notificação, mensagem ou ligação e vibrar em momentos específicos ao decorrer de um jogo (uma bomba explodindo, talvez) — causando uma maior imersão para o jogador.

Outras utilidades não tão óbvias poderiam ser, por exemplo, guiar um usuário portador de deficiência visual em um ambiente, onde cada tipo de vibração poderia corresponder a direcionamentos como ‘esquerda’, ‘direita’, ‘trás’, ‘frente’, etc. Um experimento que achei bastante criativo foi um comunicador em código morse entre dois dispositivos utilizando a API de vibração e Web Sockets. A partir daí vai de acordo com a criatividade de cada um.

Suporte

navigator.vibrate()32 *--26 *?--
* Ainda não há nenhuma informação no caniuse à respeito da Vibration API, então fiz essa verificação nos navegadores que tenho atualmente.
#62