移动端学习笔记(四)
transform
transform 变换 -webkit-transform
rotate 旋转 deg
skew 斜切 skewX skewY
scale 缩放 (原始大小的多少倍)(x,y) scaleX scaleY
translate 位移 translateX translateY
transform-origin: center center;
关键字
百分比
距离单位(px,em,rem...)
多个属性连写时,先写的后执行
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,user-scalable=no" /> <title>Document</title> <style type="text/css"> #box {width: 100px; height: 100px; border: 1px solid #000; padding: 100px; } #div {width: 100px; height: 100px; background: red; transition: 1s; } </style> <script type="text/javascript"> document.addEventListener('touchstart',function(e){ // 阻止默认事件 e.preventDefault(); }); window.onload = function(){ // 移动端获取元素: querySelector() var oDiv = document.querySelector('#div'); oDiv.addEventListener('touchend',function(){ // this.style.webkitTransform = this.style.transform = 'rotate(360deg)'; // this.style.webkitTransform = this.style.transform = 'skew(-40deg,-40deg)'; // this.style.webkitTransform = this.style.transform = 'scale(.5,2)'; // this.style.webkitTransform = this.style.transform = 'translate(100px,100px)'; this.style.webkitTransform = this.style.transform = 'translateX(100px) scale(.5)'; }); }; </script> </head> <body> <div id="box"> <div id="div"></div> </div> </body> </html>
矩阵
matrix(1, 0, 0, 1, 0, 0) 矩阵
matrix(a, b, c, d, e, f)
位移:
x轴位移 = e + x;
y轴位移 = f + y;
缩放:
x轴:
a = a*x;
c = c*x;
e = e*x;
y轴:
b = b*x;
d = d*x;
f = f*x;
先位移,再缩放:
位移-matrix(1, 0, 0, 1, 100, 100)
缩放-matrix(.5, 0, 0, .5, 50, 50)
先缩放,再位移:
缩放-matrix(.5, 0, 0, .5, 0, 0)
位移-matrix(.5, 0, 0, .5, 100, 100)
斜切:
x斜切:(deg)
c = Math.tan(30/180*Math.PI);
y斜切:(deg)
b = Math.tan(30/180*Math.PI);
角度转弧度 = deg*Math.PI/180
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,user-scalable=no" /> <title>Document</title> <style type="text/css"> #box {width: 100px; border: 1px solid #000; padding: 100px; } .div {width: 100px; height: 100px; margin: 10px 0; background: red; -webkit-transform-origin: 0 0; transform-origin: 0 0; } </style> <script type="text/javascript"> document.addEventListener('touchstart', function(e) { e.preventDefault(); }); window.onload = function(){ //console.log(30*Math.PI/180); var a = 1; var b = 0; var c = 0; var d = 1; var div = document.querySelectorAll('.div'); b = Math.tan(30*Math.PI/180); div[0].style.WebkitTransform = div[0].style.transform = "skewY(30deg)"; console.log(getComputedStyle(div[0])["transform"]); div[1].style.WebkitTransform = div[1].style.transform = " matrix("+a+", "+b+", "+c+", "+d+", 0, 0)"; console.log(getComputedStyle(div[1])["transform"]); }; </script> </head> <body> <div id="box"> <div class="div"></div> <div class="div"></div> </div> </body> </html>
三角函数
正弦:Math.sin
余弦:Math.cos
正切:Math.tan
角度转弧度:角度转弧度 = deg*Math.PI/180
<script type="text/javascript"> console.log(Math.sin(30*Math.PI/180)); console.log(Math.cos(30*Math.PI/180)); console.log(Math.tan(30*Math.PI/180)); </script>
3D变换
rotateX/rotateY/rotateZ/rotate3d
translateX/translateY/translateZ/translate3d
perspective 景深(我在多远之外来看这个元素)
加给要做3d变换的元素的父级
transform-style 元素在做3d变换时,是否保留子元素的3d变换
flat 不保留
preserve-3d 保留子元素3D变换
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <meta name="viewport" content="width=device-width,user-scalable=no"> <style> #box{ width: 100px; height: 100px; border: 1px solid #ddd; padding: 100px; -webkit-perspective: 200px; perspective: 200px; perspective-origin: left top;} #div{ width: 100px; height: 100px; background: red; -webkit-transition: all 1s; transition: all 1s; -webkit-transform-style: preserve-3d; transform-style: preserve-3d;} #div span{ display: block; width: 100px; height: 100px; background: green; -webkit-transform: rotateX(60deg); transform: rotateX(60deg);} </style> <script> document.addEventListener('touchstart',function(e){ e.preventDefault(); }); window.onload = function(){ var oDiv = document.querySelector('#div'); oDiv.addEventListener('touchend',function(){ this.style.WebkitTransform = this.style.transform = 'rotateY(-360deg)'; }); }; </script> </head> <body> <div id="box"> <div id="div"> <span></span> </div> </div> </body> </html>