Recentemente, encontrei alguns sites que parecem acessar o acelerômetro ou o giroscópio no meu laptop, detectando alterações na orientação ou no movimento.
Como isso é feito? Devo me inscrever em algum tipo de evento no window
objeto?
Em quais dispositivos (laptops, telefones celulares, tablets) isso funciona?
NB : Eu já sei (em parte) a resposta a esta pergunta e vou publicá-la imediatamente. A razão pela qual estou postando a pergunta aqui é para que todos saibam que os dados do acelerômetro estão disponíveis em Javascript (em determinados dispositivos) e para desafiar a comunidade a publicar novas descobertas sobre o assunto. Atualmente, parece não haver quase nenhuma documentação desses recursos.
javascript
accelerometer
gyroscope
Jørn Schou-Rode
fonte
fonte
Respostas:
A maneira de fazer isso em 2019+ é usar a
DeviceOrientation
API . Isso funciona nos navegadores mais modernos em computadores e dispositivos móveis.fonte
Atualmente, existem três eventos distintos que podem ou não ser acionados quando os dispositivos clientes são movidos. Dois deles estão focados em orientação e o último em movimento :
ondeviceorientation
é conhecido por funcionar na versão desktop do Chrome, e a maioria dos laptops da Apple parece ter o hardware necessário para que isso funcione. Também funciona no Mobile Safari no iPhone 4 com iOS 4.2. Na função de manipulador de eventos, você pode acessaralpha
,beta
,gamma
valores sobre os dados do evento fornecidos como o único argumento para a função.onmozorientation
é suportado no Firefox 3.6 e mais recente. Novamente, isso é conhecido por funcionar na maioria dos laptops da Apple, mas também pode funcionar em máquinas Windows ou Linux com acelerômetro. Na função de manipulador de eventos, procurex
,y
,z
campos nos dados de eventos fornecido como primeiro argumento.ondevicemotion
é conhecido por funcionar no iPhone 3GS + 4 e iPad (ambos com iOS 4.2) e fornece dados relacionados à aceleração atual do dispositivo cliente. Os dados do evento passados para a função manipulador temacceleration
eaccelerationIncludingGravity
que ambos têm três campos para cada eixo:x
,y
,z
O site de exemplo "detecção de terremoto" usa uma série de
if
instruções para descobrir a qual evento anexar (em uma ordem um tanto priorizada) e passa os dados recebidos para umatilt
função comum :Os fatores constantes 2 e 50 são usados para "alinhar" as leituras dos dois últimos eventos com as do primeiro, mas essas representações não são de forma alguma precisas. Para este projeto simples de "brinquedo", ele funciona muito bem, mas se você precisar usar os dados para algo um pouco mais sério, precisará familiarizar-se com as unidades dos valores fornecidos nos diferentes eventos e tratá-los com respeito :)
fonte
Não é possível adicionar um comentário à excelente explicação no outro post, mas quero mencionar que uma excelente fonte de documentação pode ser encontrada aqui .
Basta registrar uma função de evento para o acelerômetro da seguinte forma:
com o manipulador:
E para o magnetômetro, um manipulador de eventos a seguir deve ser registrado:
com um manipulador:
Também existem campos especificados no evento de movimento para um giroscópio, mas isso não parece ser universalmente suportado (por exemplo, não funcionou em um Samsung Galaxy Note).
Existe um código de trabalho simples no GitHub
fonte
Fallback útil aqui: https://developer.mozilla.org/en-US/docs/Web/Events/MozOrientation
fonte