表达式后面的先执行
translateScale.style.webkitTransform = 'translate(30px) scale(1.5)';
rotate,skew,scale,translate:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>*{margin: 0;padding: 0;}.con{width: 100px;height: 100px;border:1px solid green;display: flex;margin-bottom: 10px;}.translate-scale,.translate,.scale,.skew,.rotate{width: 50px;height: 50px;background: orange;margin: auto;line-height: 50px;text-align: center;color: #ffffff;transition: all .5s;}</style></head><body><h1>transform2D 变换</h1><h3>旋转</h3><div class="con"><div class="rotate">旋转</div></div><h3>斜切</h3><div class="con"><div class="skew">斜切</div></div><h3>缩放</h3><div class="con"><div class="scale">缩放</div></div><h3>位移</h3><div class="con"><div class="translate">位移</div></div><h3>位移+缩放</h3><div class="con"><div class="translate-scale">位移+缩放</div></div><script>// 旋转var rotate = document.querySelector('.rotate');// 围绕中心点旋转,默认为顺时针rotate.addEventListener('touchstart',(e)=>{rotate.style.webkitTransform = 'rotate(90deg)';});// 斜切var skew = document.querySelector('.skew');// X,Y方向, 围绕中心点(默认)拉两个角skew.addEventListener('touchstart',(e)=>{skew.style.webkitTransform = 'skewX(30deg) skewY(45deg)';});// 缩放var scale = document.querySelector('.scale');// 传数字(无单位),基于原来的大小,围绕中心点(默认)X,Yscale.addEventListener('touchstart',(e)=>{// scale.style.webkitTransform = 'scale(2)';// scale.style.webkitTransform = 'scale(1.5,2)';scale.style.webkitTransform = 'rotate(360deg) scale(0.1)';});// 位移px,默认为 X轴var translate = document.querySelector('.translate');// X,Y可以为负值translate.addEventListener('touchstart',(e)=>{//translate.style.webkitTransform = 'translate(25px, 25px)';translate.style.webkitTransform = 'rotate(360deg) translate(-50px,50px) scale(0.1)';});// 位移+缩放var translateScale = document.querySelector('.translate-scale');// X,Y可以为负值translateScale.addEventListener('touchstart',(e)=>{// 表达式后面的先执行translateScale.style.webkitTransform = 'translate(30px) scale(2)';});</script></body></html>
3D变换:
位移translate,向Z轴移动-100,效果非常微弱,几乎看不出变化。
加CSS:
/ 景深 /
perspective: 50px;
.con{width: 100px;height: 100px;border:1px solid green;display: flex;margin-bottom: 10px;/* 景深 */perspective: 50px;}
perspective:景深
简单来说,就是设置这个属性后,那么,就可以模拟出像我们人看电脑上的显示的元素一样。比如说, perspective:800px 意思就是,我在离屏幕800px 的地方观看这个元素。(这个属性,要设置在父元素上面)。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Transform</title><style>*{margin: 0;padding: 0;}.con{width: 100px;height: 100px;border:1px solid green;display: flex;margin-bottom: 10px;/* 景深 */perspective: 50px;}.translate-scale,.translate,.scale,.skew,.rotate{width: 50px;height: 50px;background: orange;margin: auto;line-height: 50px;text-align: center;color: #ffffff;transition: all .5s;}</style></head><body><h1>transform3D变换</h1><h3>旋转</h3><div class="con"><div class="rotate">旋转</div></div><h3>位移</h3><div class="con"><div class="translate">位移</div></div></body><script>// 旋转var rotate = document.querySelector(".rotate");rotate.addEventListener("touchstart",()=>{rotate.style.WebkitTransform = "rotateZ(45deg)";})// 位移var translate = document.querySelector(".translate");translate.addEventListener("touchstart",()=>{translate.style.WebkitTransform = "translateZ(-100px)";})</script></html>
父级和子级都有3D效果,子级的效果如果被父级覆盖,则需要在父级元素上加:
transform-style: preserve-3d;
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>transform-style</title><style>.div1{position: relative;height: 300px;width: 300px;padding:20px;border: 1px solid gray;}.div2{padding:50px;position: absolute;border: 1px solid black;background-color: green;/* 3D转换 */transform: rotateY(60deg);/* 父级 */transform-style: preserve-3d;}.div3{padding:30px;position: absolute;border: 1px solid black;background-color: orange;/* 3D转换 */transform: rotateY(-60deg);}</style></head><body><div class="div1"><div class="div2">我是div2,父级<div class="div3">div3</div></div></div></body></html>
第一个封装版本:
function cssTransform(ele, attr, val){// ele:操作的元素// 运动属性// val 具体的值if(!ele.transform){ele.transform = {};}if (typeof val === 'undefined'){// 取不到值的话,给默认值if(typeof ele.transform[attr] === "undefined") {switch(attr){case 'scale':case 'scaleX':case 'scaleY':case 'scaleZ':ele.transform[attr] = 1;break;default:ele.transform[attr] = 0;}}// 取值return ele.transform[attr];}else {// 设置值ele.transform[attr] = val;let transformValue = '';for(var name in ele.transform) {switch(name){case "scale":case "scaleX":case "scaleY":case "scaleZ":transformValue += "" + name + "(" + (ele.transform[name]) + ")";break;case "rotate":case "rotateX":case "rotateY":case "rotateZ":case "skewX":case "skewY":transformValue += "" + name + "(" + (ele.transform[name]) + "deg)";break;default:transformValue += "" + name + "(" + (ele.transform[name]) + "px)";}ele.style.webkitTransform = ele.style.transform = transformValue;}}}
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>*{margin: 0;padding: 0;}.con{width: 100px;height: 100px;border:1px solid green;display: flex;margin-bottom: 10px;}.translate-scale,.translate,.scale,.skew,.rotate{width: 50px;height: 50px;background: orange;margin: auto;line-height: 50px;text-align: center;color: #ffffff;transition: all .5s;}</style></head><body><h1>transform2D变换</h1><h3>旋转</h3><div class="con"><div class="rotate">旋转</div></div><h3>斜切</h3><div class="con"><div class="skew">斜切</div></div><script src="./transform1.0.js"></script><script>var rotate = document.querySelector('.rotate');rotate.addEventListener('touchstart',(e)=>{cssTransform(rotate, 'rotate', 90);cssTransform(rotate, 'scale', 2);});</script></body></html>
注意:
定义变量时,使用一个var比使用多个var效率更高。
var d =1, d1=2, d2=3;和var d=1;var d1=2;var d2=3;
第二个版本:
function Transform(element){var units = {},transform,transforms = {},attrs = ['scale', 'scaleX','scaleY','scaleZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ','skew', 'skewX', 'skewY', 'translate', 'translateX', 'translateY', 'translateZ'];attrs.forEach(function(attr){if (attr.indexOf('scale') >= 0){units[attr] = '';// 设置默认值transforms[attr] = 1;}else {units[attr] = attr.indexOf('translate') >= 0 ? 'px' : 'deg';// 设置默认值transforms[attr] = 0;}// 在对象上定义一个属性Object.defineProperty(element, attr, {get: function(){return transforms[attr];},set: function(value){transform = '';transforms[attr] = value;attrs.forEach(function(attr){transform += attr + '(' + transforms[attr] + units[attr] + ')';});console.log(transform);element.style.transform = transform;}});});}
DOM 赋能:
Transform(rotate);
<script>var rotate = document.querySelector('.rotate');rotate.addEventListener('touchstart',(e)=>{// DOM 赋能Transform(rotate);rotate.rotate = 90;var deg = rotate.rotate;console.log(deg);});</script>

移动端自定义滑动区域
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>body{margin: 0;padding: 0;}body,html{height: 100%;overflow: hidden;position: relative;}header{width: 100%;height: 40px;background: greenyellow;color: black;line-height: 40px;text-align: center;}#wrap{position: absolute;top:40px;bottom: 0;right: 0;left: 0;overflow: hidden;}#list{margin: 0;padding: 0;list-style: none;}#list li{background: #ffffff;color: #333333;height: 40px;line-height: 40px;border-bottom: 1px solid #999999;text-indent: 20px;}</style></head><body><header>我是Header</header><div id="wrap"><ul id="list"></ul></div><script>function $my(id){return document.getElementById(id);}function initList(){var list = $my('list');var html = '';for(var i=0; i<80; i++){html += '<li>第' + (i+1) + '个</li>';}list.innerHTML = html;}initList();var wrap = $my('wrap');var lists = $my('list');var startY = 0;lists.addEventListener('touchstart', (e)=>{startY = e.changedTouches[0].pageY;});lists.addEventListener('touchmove', (e)=>{var moveY = e.changedTouches[0].pageY;// 距离 = 起始点 - 活动点var distance = moveY - startY;if (distance < 0) {lists.style.webkitTransform = lists.style.transform ='translateY(' + distance + 'px)';}});</script></body></html>
