Recientemente me he encontrado con algunos sitios web que parecen acceder al acelerómetro o giroscopio en mi computadora portátil, detectando cambios en la orientación o el movimiento.
¿Cómo se hace esto? ¿Debo suscribirme a algún tipo de evento en el windowobjeto?
¿En qué dispositivos (computadoras portátiles, teléfonos móviles, tabletas) se sabe que esto funciona?
NB : De hecho, ya sé (parte de) la respuesta a esta pregunta, y la voy a publicar de inmediato. La razón por la que estoy publicando la pregunta aquí, es para que todos los demás sepan que los datos del acelerómetro están disponibles en Javascript (en ciertos dispositivos) y para desafiar a la comunidad a publicar nuevos hallazgos sobre el tema. Actualmente, parece que casi no hay documentación de estas características.
fuente

Respuestas:
La forma de hacer esto en 2019+ es usar
DeviceOrientationAPI . Esto funciona en la mayoría de los navegadores modernos en computadoras de escritorio y dispositivos móviles.fuente
Actualmente hay tres eventos distintos que pueden o no activarse cuando se mueven los dispositivos del cliente. Dos de ellos se centran en la orientación y el último en el movimiento :
ondeviceorientationse sabe que funciona en la versión de escritorio de Chrome, y la mayoría de las computadoras portátiles de Apple parecen tener el hardware necesario para que esto funcione. También funciona en Mobile Safari en el iPhone 4 con iOS 4.2. En la función de controlador de eventos, puede accederalpha,beta,gammalos valores de los datos del evento suministrados como el único argumento de la función.onmozorientationes compatible con Firefox 3.6 y versiones posteriores. Nuevamente, se sabe que esto funciona en la mayoría de las computadoras portátiles de Apple, pero también podría funcionar en máquinas Windows o Linux con acelerómetro. En la función de controlador de eventos, busquex,y,zcampos en los datos del evento suministran como primer argumento.ondevicemotionse sabe que funciona en iPhone 3GS + 4 y iPad (ambos con iOS 4.2), y proporciona datos relacionados con la aceleración actual del dispositivo cliente. Los datos de eventos pasados a la función de controlador tieneaccelerationyaccelerationIncludingGravityque ambos tienen tres campos para cada eje:x,y,zEl sitio web de muestra "detección de terremotos" utiliza una serie de
ifdeclaraciones para determinar a qué evento adjuntar (en un orden algo prioritario) y pasa los datos recibidos a unatiltfunción común :Los factores constantes 2 y 50 se utilizan para "alinear" las lecturas de los dos últimos eventos con las del primero, pero de ninguna manera son representaciones precisas. Para este simple proyecto de "juguete" funciona bien, pero si necesita utilizar los datos para algo un poco más serio, deberá familiarizarse con las unidades de los valores proporcionados en los diferentes eventos y tratarlos con respeto :)
fuente
No se puede agregar un comentario a la excelente explicación en la otra publicación, pero quería mencionar que se puede encontrar una excelente fuente de documentación aquí .
Es suficiente registrar una función de evento para acelerómetro así:
con el manejador:
Y para el magnetómetro se debe registrar un siguiente controlador de eventos:
con un controlador:
También hay campos especificados en el evento de movimiento para un giroscopio, pero eso no parece ser universalmente compatible (por ejemplo, no funcionó en un Samsung Galaxy Note).
Hay un código de trabajo simple en GitHub
fuente
Respaldo útil aquí: https://developer.mozilla.org/en-US/docs/Web/Events/MozOrientation
fuente