2010-02-27 5 views
1

ceci est ma fonction simple (« de mycompass » est un div dans mon corps)Rotation problème de webkit quand on tourne comme une boussole

function watchCompass() { 

    var suc = function(a){  
     var r =a.magneticHeading; 
     document.getElementById('mycompass').style.webkitTransform = "rotateZ("+-r+"deg)"; 
    }; 
    var fail = function(){}; 
    var opt = {}; 
    opt.frequency = 50; 
    timer = navigator.compass.watchHeading(suc,fail,opt); 
} 

pour une raison quelconque lorsque la boussole « roue » fait une rotation complète de 0 à 360 il remonte à 0 et non à la "virtuelle" 361 ... etc .. ne peut pas comprendre que de 0 et 360 il n'y a pas de différence ...

et je ne sais pas comment calculer un moyen d'avoir la roue lisse dans le sens horaire et antihoraire

une autre façon de mettre ce que stion est:

comment puis-je tourner mon objet de, par exemple, de 15deg à 270deg, dans le sens antihoraire au lieu de sens horaire? comment puis-je dire à mon script que vale?

+0

Vous avez déjà demandé ce question, et je vous ai déjà donné une réponse. Vous allez devoir poster plus de code; vous avez omis "navigator", "compass", la fonction "watchHeading", etc etc Ce n'est pas vraiment une question Javascript, c'est plus sur l'arithmétique modulo simple. – Pointy

+0

je continue à demander car je suis gentil surprise personne n'est vraiment capable de résoudre ce problème. – Francesco

+0

dans cet exemple si vous cliquez d'abord E clokwise, alors S il fait simplement ce que le script fait. – Francesco

Répondre

2

ceci est ma solution, mais j'ai Stil problème lorsque le degré de roue == -360 ou 360

var angle = 0; 
var lastAngle = 0; 




    function watchCompass() { 

      var suc = function(a){ 
      var angle = roundNyc(a.magneticHeading); 

     l1 = angle - lastAngle; 
     l2 = 360 - l1; 

     if(Math.abs(l1) >= Math.abs(l2)){ 

     r = (lastAngle - l2) ; 

     }else{ 

     r = angle ; 

     }  

     lastAngle = r;  
     l1 = 0; 
     l2 = 0; 

    document.getElementById('mycompass').style.webkitTransform = 'rotateZ(' + -r + 'deg)'; 

      }; 
      var fail = function(){}; 
      var opt = {}; 
      opt.frequency = 50; 
      timer = navigator.compass.watchHeading(suc,fail,opt); 
     } 
0

Encore une fois, voici un exemple de la façon de le faire: http://gutfullofbeer.net/compass.html

+0

Je ne pense toujours pas que c'est le bon exemple parce que cette boussole est bête et ne reconnaît pas la plus courte distance entre deux points, elle va simplement de A à B sans demander "est plus courte pour aller de A vers B ou B vers l'arrière? " comme une vraie boussole – Francesco