我正在使用函数来获取对象的旋转,但它在IE8中失败



我正在使用此功能:

// function that grabs the elements rotation in all browsers
function getRotationDegrees(obj) {
var matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform")    ||
obj.css("-ms-transform")     ||
obj.css("-o-transform")      ||
obj.css("transform");
if(matrix !== 'none') {
    var values = matrix.split('(')[1].split(')')[0].split(',');
    var a = values[0];
    var b = values[1];
    var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
} else { var angle = 0; }
    return (angle < 0) ? angle +=360 : angle;
}

在任何其他浏览器中都可以很好地工作,但是在IE8中,它引发了此错误"无法获得属性'split'的值:对象为无效或不确定"。这是因为矩阵变量以"未定义"返回,但我需要它返回旋转的价值,我不确定如何获得IE8,任何想法吗?

未经测试的解决方案,基于我用来设置IE8中元素旋转的代码:

var matrix = obj.style.filter; // obj is a HTML Element. If you have jQuery, i suppose you could use that to get the filter property
// at this point matrix is a string like this:
    'progid:DXImageTransform.Microsoft.Matrix(' +
      'M11=' + cos + ', ' +
      'M12=' + (-sin) + ', ' +
      'M21=' + sin + ', ' +
      'M22=' + cos + ', ' +
      'sizingMethod="auto expand")';
// where cos and sin are Math.cos(angleInRadians) and Math.sin(angleInRadians)

下一步是获取其中一个值(我想解析字符串)并使用Math.asinMath.acos以获取弧度的角度。如果您需要它,则需要将其乘以180,然后除以Math.PI

类似于您的代码,您可以做:

var values = matrix.match(/=.*?M/g);
var sin = values[2].substring(1,values[2].length-1);
var cos = values[0].substring(1,values[2].length-1);

从矩阵中提取sin和cos。

最新更新