2013-10-24 1 views
5

私はコードでfound at CSS-Tricksを使用してJavaScriptを使用して現在の回転変換を取得しています。JavaScriptを使用してCSSトランスフォームの回転値を度で取得する方法

JavaScript関数:

function getCurrentRotation(elid) { 
    var el = document.getElementById(elid); 
    var st = window.getComputedStyle(el, null); 
    var tr = st.getPropertyValue("-webkit-transform") || 
     st.getPropertyValue("-moz-transform") || 
     st.getPropertyValue("-ms-transform") || 
     st.getPropertyValue("-o-transform") || 
     st.getPropertyValue("transform") || 
     "fail..."; 

    if(tr !== "none") { 
    console.log('Matrix: ' + tr); 

    var values = tr.split('(')[1]; 
     values = values.split(')')[0]; 
     values = values.split(','); 
    var a = values[0]; 
    var b = values[1]; 
    var c = values[2]; 
    var d = values[3]; 

    var scale = Math.sqrt(a*a + b*b); 

    // arc sin, convert from radians to degrees, round 
    /**/
    var sin = b/scale; 
    var angle = Math.round(Math.asin(sin) * (180/Math.PI)); 
    /*/ 
    var angle = Math.round(Math.atan2(b, a) * (180/Math.PI)); 
    /**/ 

    } else { 
    var angle = 0; 
    } 

    // works! 
    console.log('Rotate: ' + angle + 'deg'); 
    $('#results').append('<p>Rotate: ' + angle + 'deg</p>'); 
} 

ポストによると、これは私が負の数を取得し、180度以上の値のために、しかし、作品、および360degはゼロを返します。 180度から360度の度数を正しく返すことができる必要があります。

正しい度合を180度戻すことができないこのコードでは何が間違っていますか?

デモを見るとかなり意味があります:See the pen for a demo of this in action

+0

あなたは単に角度に360を追加することができませんか? –

+0

はい、更新されたコードで回答が追加されました。幾何学の知識が不足していることがわかった。見つかりましたヘルプ:http://stackoverflow.com/questions/10343448/javascript-atan2-function-not-giving-expected-results – jjeaton

答えて

5

答えが別のSO質問で見つかった場合、結果がラジアン単位でゼロ未満であれば(2 * PI)を加えなければなりません。

このライン:

var angle = Math.round(Math.atan2(b, a) * (180/Math.PI)); 

はこれを交換する必要がある:それは0より小さいか=であれば

var radians = Math.atan2(b, a); 
if (radians < 0) { 
    radians += (2 * Math.PI); 
} 
var angle = Math.round(radians * (180/Math.PI)); 
関連する問題