8
votes

Test du support matériel dans JavaScript pour les événements d'orientation des périphériques de l'iPhone 3GS

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');
}


0 commentaires

4 Réponses :


0
votes

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.


1 commentaires

Bonjour, je ne peux détecter que le périphérique Motion é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.



4
votes

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);
  }
}


1 commentaires

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.



3
votes

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);


0 commentaires

0
votes

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: xxx

jsfiddle: http://jsfiddle.net/7l5mg8hj/1/]


1 commentaires

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 , 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 . Prudent là-bas.