【问题标题】:Get 3D CSS rotation value from matrix3d() with JavaScript使用 JavaScript 从 matrix3d() 获取 3D CSS 旋转值
【发布时间】:2016-03-30 18:47:46
【问题描述】:

我有一个元素 3D 转换如下:

.foo {
  transform: rotateX(-30deg) rotateY(35deg);
}

现在我想通过 javascript 获取这些值。 3D矩阵很容易得到:

var matrix = $('.foo').css('transform');
// return:
// matrix3d(0.819152, -0.286788, -0.496732, 0, 0, 0.866025, -0.5, 0, 0.573576, 0.409576, 0.709406, 0, 0, 0, 0, 1)

但是是否可以使用该矩阵计算类似于 CSS 的值 -30 和 35?我刚刚找到了为2D transforms 执行此操作的方法。

【问题讨论】:

标签: javascript css matrix 3d css-transforms


【解决方案1】:

好的,明白了!

var _getTransform = function($element) {

    var matrix = $element.css('transform'),
        rotateX = 0,
        rotateY = 0,
        rotateZ = 0;

    if (matrix !== 'none') {

        // do some magic
        var values = matrix.split('(')[1].split(')')[0].split(','),
            pi = Math.PI,
            sinB = parseFloat(values[8]),
            b = Math.round(Math.asin(sinB) * 180 / pi),
            cosB = Math.cos(b * pi / 180),
            matrixVal10 = parseFloat(values[9]),
            a = Math.round(Math.asin(-matrixVal10 / cosB) * 180 / pi),
            matrixVal1 = parseFloat(values[0]),
            c = Math.round(Math.acos(matrixVal1 / cosB) * 180 / pi);

        rotateX = a;
        rotateY = b;
        rotateZ = c;

    }

    return {
        rotateX: rotateX,
        rotateY: rotateY,
        rotateZ: rotateZ
    };

}

【讨论】:

  • 嘿,谢谢你的功能。不过我有一个问题:返回值显然在 0 到 90 度之间。我们怎样才能得到一个从 0 到 360 的值?
  • 对于 0 到 360:c = Math.round(Math.atan2(values[1], values[0]) * 180 / pi);if (c < 0) { c = 360 + c; }
猜你喜欢
  • 2013-04-28
  • 2023-04-05
  • 2023-03-31
  • 2014-10-11
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
相关资源
最近更新 更多