工做中一直作普通的網頁,今天瀏覽到一篇作3d旋轉的盒子的效果,感受挺好玩,因而跟着教程練了練,在此作個記錄
htmlcss
<div class='camera'> <div class='box'> <div class="face face1">1</div> <div class="face face2">2</div> <div class="face face3">3</div> <div class="face face4">4</div> <div class="face face5">5</div> <div class="face face6">6</div> </div> </div>
camera用來控制景深(perspective)
box包裹立方體六個面
face1-6是立方體的六個面
csshtml
.camera { width: 200px; height: 200px; perspective-origin: center; perspective: 200px; } .box { transform-style:preserve-3d; position:relative; width:100%; height:100%; border:1px dashed #000; } .face { width: 100px; height: 100px; background: red; display: flex; align-items: center; justify-content: center; font-size: 38px; color: white; position: absolute; } .face1 { background: #3498db; transform:translateX(50px) translateY(50px) translateZ(50px); } .face2 { background: #9b59b6; transform-origin: 0 0; //設置transform的基準點 transform:translateX(150px) translateY(50px) translateZ(50px) rotateY(90deg); } //transform是有順序的,先旋轉再平移和先平移再旋轉的效果可能不一樣 .face3 { background: #f1c40f; transform-origin: 0 0; transform:translateX(50px) translateY(50px) translateZ(50px) rotateX(-90deg); } .face4 { background: #7f8c8d; transform-origin: 0 0; transform:translateX(50px) translateY(150px) translateZ(50px) rotateX(-90deg); } .face5 { background: #2ecc71; transform-origin: 100% 100%; transform: translateX(-50%) translateY(50px) translateZ(50px) rotateY(-90deg); } .face6 { background: #34495e; transform: translateX(50px) translateY(50px) translateZ(-50px) rotateY(-180deg); } //作一個旋轉的動畫,看看6個面寫的是否正確 .box { animation: rotate 4s linear infinite ; } @keyframes rotate{ 0%{ -webkit-transform:rotateY(0) rotateX(0); } 50%{ -webkit-transform:rotateY(-359.9deg) rotateX(0); } 100% { -webkit-transform:rotateY(-359.9deg) rotateX(-359.9deg); } }
若是是手機觀看的話,增長陀螺儀效果顯得更nice
jsweb
var box = document.querySelectorAll('.box'); window.addEventListener('deviceorientation', function(event) { var alpha = event.alpha, beta = event.beta, gamma = event.gamma; box[0].style.webkitTransform = 'rotateX(' + beta + 'deg) rotateY(' + gamma + 'deg) rotateZ(' + alpha + 'deg)'; box[0].style.transform = 'rotateX(' + beta + 'deg) rotateY(' + gamma + 'deg) rotateZ(' + alpha + 'deg)'; box[0].style.mozTransform = 'rotateX(' + beta + 'deg) rotateY(' + gamma + 'deg) rotateZ(' + alpha + 'deg)'; }, false);
附上做者忠告:
人在一個環境下生活過久,就容易產生惰性。由於無論你怎麼活,明天太陽照樣升起。
咱們能作的,就是盡全力不讓本身被這種慢性毒藥所蠱惑,努力,努力衝開束縛你的結界。flex