获取元素-moz-transform:在jQuery中旋转值

Gol*_*die 48 css jquery transform rotation

我有一个图层的CSS样式:

.element {
    -webkit-transform: rotate(7.5deg);    
     -moz-transform: rotate(7.5deg);    
      -ms-transform: rotate(7.5deg);    
       -o-transform: rotate(7.5deg);   
          transform: rotate(7.5deg);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法通过jQuery获得curent旋转值?

我试过这个

$('.element').css("-moz-transform")
Run Code Online (Sandbox Code Playgroud)

结果matrix(0.991445, 0.130526, -0.130526, 0.991445, 0px, 0px)并没有告诉我很多.我想要得到的是7.5.

Twy*_*stO 91

这是我使用jQuery的解决方案.

这将返回与应用于任何HTML元素的旋转相对应的数值.

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

angle1 = getRotationDegrees($('#myDiv'));
angle2 = getRotationDegrees($('.mySpan a:last-child'));
Run Code Online (Sandbox Code Playgroud)

等等...


小智 9

我在Twist的代码中发现了一个错误/功能:函数返回角度.

所以我在返回之前添加了一行简单的代码angle:

if(angle < 0) angle +=360;
Run Code Online (Sandbox Code Playgroud)

比结果将是:

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

    if(angle < 0) angle +=360;
    return angle;
}
Run Code Online (Sandbox Code Playgroud)

  • 我今天获得了死灵法师徽章......并用你的错误修正了我的代码:)谢谢你注意到负角度的可能性. (2认同)
  • 你应该将`if(angle <0)`改为`while(angle <0)`,这样小于-360的角度继续被处理,直到它们变为正数. (2认同)

Ivo*_*ema 5

这是Twist功能的插件版本.此外,条件if(矩阵!=='无')对我不起作用.所以我添加了类型检查:

(function ($) {
    $.fn.rotationDegrees = function () {
         var matrix = this.css("-webkit-transform") ||
    this.css("-moz-transform")    ||
    this.css("-ms-transform")     ||
    this.css("-o-transform")      ||
    this.css("transform");
    if(typeof matrix === 'string' && 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;
   };
}(jQuery));
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

var rotation = $('img').rotationDegrees();
Run Code Online (Sandbox Code Playgroud)


Pig*_*vel 5

我的解决方案(使用jQuery):

$.fn.rotationInfo = function() {
    var el = $(this),
        tr = el.css("-webkit-transform") || el.css("-moz-transform") || el.css("-ms-transform") || el.css("-o-transform") || '',
        info = {rad: 0, deg: 0};
    if (tr = tr.match('matrix\\((.*)\\)')) {
        tr = tr[1].split(',');
        if(typeof tr[0] != 'undefined' && typeof tr[1] != 'undefined') {
            info.rad = Math.atan2(tr[1], tr[0]);
            info.deg = parseFloat((info.rad * 180 / Math.PI).toFixed(1));
        }
    }
    return info;
};
Run Code Online (Sandbox Code Playgroud)

用法:

$(element).rotationInfo(); // {deg: 7.5, rad: 0.13089969389957515}
$(element).rotationInfo().deg; // 7.5
Run Code Online (Sandbox Code Playgroud)