移动端 transform 详解

今天我总结了一下transform 在移动端的用法。这里我主要讲解它的 2D 方法。其实3D 方法不是很难,我感觉编写3D 的难处在于你的想象力和数学功底。这里主要是讲js控制transform

3D方法请见:http://blog.csdn.net/webxiaoma/article/details/69950318

一、transform 位移

我们使用js 控制位移的方法有两种:

1.translate

 <div class="div">  </div> // 样式自己给

<script type="text/javascript">
     var div = document.querySelector('.div');
     div.style.webkitTransform = 'translate(50px,50px)' 
     console.log(getComputedStyle(div)['transform']) // 获取元素样式 matrix(1, 0, 0, 1, 50, 50)
</script>

2.matrix() 矩阵方法:

matrix(a,b,c,d,e,f) // 有六个参数

控制位移参数:
x轴位移参数 e ;
y轴位移参数 f ;

上面位移用matrix() 方法去写:

div.style.webkitTransform = "matrix(1,0,0,1,50,50)" 
二、transform 缩放

1.scale() 方法

 div.style.webkitTransform = 'scale(0.5,0.5)' 

2.matrix()方法

matrix(a,b,c,d,e,f) // 有六个参数

控制位移参数:
x轴缩放参数 a ;
y轴缩放参数 d ;

上面位移用matrix() 方法去写:

 div.style.webkitTransform = 'matrix(0.5,0,0,0.5,0,0)' ;

重点内容:

这里有个问题:

  • 当缩放和位移一起写时,他们书写的先后书序会带来不同效果。
    ①例如:先写位移效果
 div.style.webkitTransform = 'translate(50px,50px) scale(0.5,0.5) ' 
 console.log(getComputedStyle(div)['transform']) //结果:matrix(0.5,0,0,0.5,50,50)

这里没有什么问题,和我们想象的一样,元素先在x轴和y轴上移动50px;然后在缩小一倍;

②我们将位移和缩放倒过来写

 div.style.webkitTransform = 'scale(0.5,0.5)  translate(50px,50px)' 
 console.log(getComputedStyle(div)['transform']) //结果:matrix(0.5,0,0,0.5,25,25)

这时我们会发现,元素先缩小了一半,但是位移也缩小了一半,元素在x轴和y轴上移动25px;

三、transform 斜切

斜切是按元素与x坐标轴或y坐标轴之间产生的一个角度,要把它和旋转区分开

1.skew() 方法

div.style.webkitTransform = 'skewX(30deg)' ;
console.log(getComputedStyle(div)['transform']); //结果:matrix(1, 0, 0.57735, 1, 0, 0)

2.matrix()方法

matrix(a,b,c,d,e,f) // 有六个参数

控制斜切参数:
x轴斜切参数 c ;
y轴斜切参数 b ;

想要用matrix() 矩阵方法实现斜切我们要知道一些计算斜切的公式:
角度转化为弧度公式: deg*Math.PI/180; (deg是角度)
正切公式: Math.tan();
如果你不是很了解这些公式,可以恶补一下初中数学知识。

上面位移用matrix() 方法去写:

 var mat = Math.tan(30*Math.PI/180);
 div.style.webkitTransform = 'matrix(1,'+mat+',0,1,0,0)' ;
 console.log(getComputedStyle(div)['transform']); //结果:matrix(1, 0, 0.57735, 1, 0, 0)
四、transform 旋转

1.rotate()方法

div.style.webkitTransform = 'rotate(30deg)' ;

console.log(getComputedStyle(div)['transform']);    //matrix(0.866025, 0.5, -0.5, 0.866025, 0, 0)

2.matrix()方法

matrix(a,b,c,d,e,f) // 有六个参数

控制斜切参数:
旋转参数 a ; 旋转角度
旋转参数 b ; 旋转方向 b为正值,c为负值时,顺时针旋转
旋转参数 c ; 旋转方向 b为负值,c为正值时,逆时针旋转
旋转参数 d ; 旋转角度

角度转化为弧度公式: deg*Math.PI/180; (deg是角度)

正弦公式: Math.sin();
余弦公式: Math.cos();

let a = Math.cos(30*Math.PI/180);
let b = Math.sin(30*Math.PI/180);
let c = -Math.sin(30*Math.PI/180);
let d = Math.cos(30*Math.PI/180);
diva.style.webkitTransform = 'matrix('+ a +','+b+','+c+','+ d+',0,0)' ;

console.log(getComputedStyle(div)['transform']);    //matrix(0.866025, 0.5, -0.5, 0.866025, 0, 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值