Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
37
rated 0 times [  38] [ 1]  / answers: 1 / hits: 18316  / 11 Years ago, thu, october 24, 2013, 12:00:00

I'm using the code found at CSS-Tricks to get the current rotation transform (in CSS) with JavaScript.



JavaScript function:



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


According to the post, this works, however, for values over 180 degrees, I get negative numbers, and 360deg returns zero. I need to be able to correctly return the degree value from 180-360 degrees.



What am I doing wrong with this code that won't let it return the correct degree turn over 180 degrees?



It will make a lot more sense if you view the demo: See the pen for a demo of this in action.


More From » css

 Answers
9

Found the answer in another SO question, you have to add (2 * PI) if the result in radians is less than zero.



This line:



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


Needs to be replaced with this:



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

[#74753] Wednesday, October 23, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
parkernotnamedt

Total Points: 539
Total Questions: 90
Total Answers: 99

Location: Hong Kong
Member since Tue, Oct 19, 2021
3 Years ago
;