使用js从element的matrix推导transform的scale、rotate 和 translate参数

本文深入解析CSS中transform属性的数学原理,通过逆推公式揭示如何从矩阵中提取旋转角度、缩放比例及位移量。适用于前端开发者理解和调试复杂的页面布局效果。

transform

网上很多都只介绍了还原角度和缩放的参数,但是没有就偏移量的计算,自己还原了一下公式的意义,进行了公式的反推,具体的推到过程就不详叙了,可以参看w3c的矩阵含义。

直接上干货。

    function getElementCss(e, name)
    {
        var st = window.getComputedStyle(e, null);
        return st.getPropertyValue(name);
    }
    function getTransformPara(elem)
    {
        // var elem = document.getElementById(id);
        var tr = getElementCss(elem, "-webkit-transform");  
        if(tr!="none")
        {
            var values = tr.split("(")[1].split(")")[0].split(",");
            var a = values[0];
            var b = values[1];
            var c = values[2];
            var d = values[3];
            var e = values[4];
            var f = values[5];
            var scale1 = Math.sqrt(a * a + b * b);
            var scale2 = Math.sqrt(c * c + d * d);
            var angle = Math.atan2(b, a) * (180.0 / Math.PI);
            e = parseFloat(e);
            f = parseFloat(f);              
            var radian = -Math.PI/180.0*angle;
            var lastX = Math.cos(radian)*e - Math.sin(radian)*f;
            var LastY = Math.sin(radian)*e + Math.cos(radian)*f; 
            return {
                ScaleX: scale1,
                ScaleY: scale2,
                Angle: angle,
                MovX: lastX,
                MovY: LastY,
            };
        }
        else
        {
            return {
                ScaleX: 1,
                ScaleY: 1,
                Angle: 0,
                MovX: 0,
                MovY: 0,
            };
        }          
    }

转载于:https://www.cnblogs.com/chencarl/p/10149059.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值