Je suis récemment tombé sur quelques sites Web qui semblent accéder à l'accéléromètre ou au gyroscope de mon ordinateur portable, détectant des changements d'orientation ou de mouvement.
Comment cela se fait-il? Dois-je m'abonner à une sorte d'événement sur l' window
objet?
Sur quels appareils (ordinateurs portables, téléphones portables, tablettes) cela fonctionne-t-il?
NB : Je connais déjà (en partie) la réponse à cette question, et je vais la poster tout de suite. La raison pour laquelle je poste la question ici, est de faire savoir à tout le monde que les données de l'accéléromètre sont disponibles en Javascript (sur certains appareils) et de mettre au défi la communauté de publier de nouvelles découvertes sur le sujet. Actuellement, il ne semble y avoir pratiquement aucune documentation sur ces fonctionnalités.
la source
Réponses:
La façon de faire cela en 2019+ est d'utiliser l'
DeviceOrientation
API . Cela fonctionne dans la plupart des navigateurs modernes sur ordinateur et mobile.la source
Il existe actuellement trois événements distincts qui peuvent ou non être déclenchés lorsque les périphériques clients se déplacent. Deux d'entre eux sont axés sur l' orientation et le dernier sur le mouvement :
ondeviceorientation
est connu pour fonctionner sur la version de bureau de Chrome, et la plupart des ordinateurs portables Apple semblent avoir le matériel nécessaire pour que cela fonctionne. Il fonctionne également sur Mobile Safari sur l'iPhone 4 avec iOS 4.2. Dans la fonction de gestionnaire d'événements, vous pouvez accéderalpha
,beta
, lesgamma
valeurs sur les données d'événement fournies comme le seul argument de la fonction.onmozorientation
est pris en charge sur Firefox 3.6 et plus récent. Encore une fois, cela est connu pour fonctionner sur la plupart des ordinateurs portables Apple, mais peut également fonctionner sur des machines Windows ou Linux avec accéléromètre. Dans la fonction de gestionnaire d'événements, recherchezx
,y
,z
champs sur les données d'événements fournis comme premier argument.ondevicemotion
est connu pour fonctionner sur iPhone 3GS + 4 et iPad (tous deux avec iOS 4.2), et fournit des données liées à l'accélération actuelle de l'appareil client. Les données d'événement transmis à la fonction de gestionnaire possèdeacceleration
etaccelerationIncludingGravity
qui ont tous deux trois champs pour chaque axe:x
,y
,z
L'exemple de site Web de "détection de tremblement de terre" utilise une série d'
if
instructions pour déterminer à quel événement attacher (dans un ordre quelque peu prioritaire) et transmet les données reçues à unetilt
fonction commune :Les facteurs constants 2 et 50 sont utilisés pour "aligner" les lectures des deux derniers événements avec celles du premier, mais ce ne sont en aucun cas des représentations précises. Pour ce simple projet "jouet", cela fonctionne très bien, mais si vous devez utiliser les données pour quelque chose d'un peu plus sérieux, vous devrez vous familiariser avec les unités des valeurs fournies dans les différents événements et les traiter avec respect :)
la source
Je ne peux pas ajouter de commentaire à l'excellente explication dans l'autre article, mais je voulais mentionner qu'une excellente source de documentation peut être trouvée ici .
Il suffit d'enregistrer une fonction événementielle pour l'accéléromètre comme ceci:
avec le gestionnaire:
Et pour le magnétomètre, un gestionnaire d'événements suivant doit être enregistré:
avec un gestionnaire:
Il existe également des champs spécifiés dans l'événement de mouvement pour un gyroscope mais cela ne semble pas être universellement pris en charge (par exemple, cela ne fonctionnait pas sur un Samsung Galaxy Note).
Il existe un code de travail simple sur GitHub
la source
Solution de secours utile ici: https://developer.mozilla.org/en-US/docs/Web/Events/MozOrientation
la source