J'essaie d'utiliser des périphériques HTML5 Evénements à JavaScript pour faire pivoter une image lorsque l'utilisateur fait pivoter son iPhone autour de lui.
J'utilise ce code pour détecter lorsque le gyroscope se déplace: P>
if(window.DeviceOrientationEvent){ // gyroscope support alert('DeviceOrientationEvent support OK'); } else { alert('DeviceOrientationEvent support KO'); }
4 Réponses :
Bien qu'il n'y ait pas de gyroscope sur les 3GS, il est parfaitement capable de détecter les changements d'orientation des périphériques à l'aide de l'accéléromètre. IOS a ce support depuis le premier iPhone. P>
Bonjour, je ne peux détecter que le périphérique Motion B> événement avec les 3GS! Le code écrit ci-dessus, avec l'auditeur des appareilsOrientationEvent, fonctionne bien avec un iPhone 4 et iPad 2 mais ne fonctionne pas sur l'iPhone 3GS.
J'espère que cela ne vous vient pas trop tard, mais n'est-ce pas frustrant que Safari pour iOS 4.2+ enregistrera les appareilsOrientationEvent sur un iPhone 3GS (ou d'autres périphériques sans gyroscope)?
Bas de la ligne de fond, périotionnel Ne fonctionne pas avec l'iPhone 3GS. Mais comme une personne mentionnée, DeviceMotionEvent fonctionne, mais vous devez accéder aux données d'événement d'une manière différente de celle avec un appareil avec un gyroscope (idiot, je sais!). P>
première étape: j'ai ajouté une variable dans le mélange pour capturer si l'OrientationationEvent a été licencié avec des données non nulles (comme il serait si il y avait un gyroscope). P>
if (window.DeviceMotionEvent && !canHandleOrientation) { window.addEventListener('devicemotion', handleMotion, false); } function handleMotion(event){ if(event.acceleration){ //requires a gyroscope to work. console.log("Motion Acceleration: " + event.acceleration.x + ", " + event.acceleration.y + ", " + event.acceleration.z); } else{ //this is for iPhone 3GS or a device with no gyroscope, and includes gravity. console.log("Motion AccelerationGravity: " + event.accelerationIncludingGravity.x + ", " + event.accelerationIncludingGravity.y + ", " + event.accelerationIncludingGravity.z); } }
Salut Arjun! Je tiens à vous remercier parce que vous me donnez des informations vraiment utiles dans votre réponse. J'espère que cet article aidera également les autres développeurs à faire face à ce comportement délicat dans Safari.
Après avoir eu le même problème que ci-dessus, j'ai également eu des problèmes avec les iPad / iPad plus anciens n'appellèrent même pas la fonction sur AddeventListener.
J'ai donc constaté que ce qui suit a fonctionné beaucoup mieux pour moi et a éliminé toute chance d'un peuple Dispositif passe (ceci était assis avec un écran de charge, il a donc nécessité un intervalle avant de terminer son test complet. Donc pas pour tout le monde). P>
var _i = null; var _e = null; var _c = 0; var updateDegree = function(e){ _e = e; } window.addEventListener('deviceorientation', updateDegree, false); // Check event support _i = window.setInterval(function(){ if(_e !== null && _e.alpha !== null){ // Clear interval clearInterval(_i); // > Run app }else{ _c++; if(_c === 10){ // Clear interval clearInterval(_i); // > Redirect } } }, 200);
J'ai eu un problème similaire que mon bureau a également accepté la fenêtre. J'ai utilisé le code suivant pour vérifier le support d'orientation dans les périphériques mobiles: jsfiddle: http://jsfiddle.net/7l5mg8hj/1/] p> p>
Testé ce violon sur la tablette S4 mobile et S4. Sur la tablette, les données d'orientation du périphérique sont toujours 0 code>, ce qui signifie que l'événement est pris en charge, mais les données ne sont pas données signifiant qu'il se glisse à l'aide de
périotionnel code>. Prudent là-bas.