簡單CSS3代碼實現立方體以及3D骰子


1 實現3D立方體

首先准備好UL以及6個Li;

代碼如下

ul {

position: absolute;
top: 50%;
left: 50%;

transform:translate(-50%,-50%)        // 以上代碼主要是使ul居中而已

 

transform-style: preserve-3d;            // 使子元素保留其3D視角
-webkit-perspective: 0;                     //視距離,默認值為0

}

 

 

 li {

width: 200px;
height: 200px;
position: absolute;
}

此時,6個LI是重疊一起,如下

 

我們分別調整6個li的位置,從而實現立方體6個面的效果

 

 

//上下面

rotateX(90deg)意為:將2個li沿着X軸旋轉90度,此時垂直於上圖1,構成了立方體的上下面。

translateZ(100px) :  旋轉后2個LI是在重疊在中間的,我們還需要它一個需要往上走LI邊長的一半,一個下走LI邊長的一半。

 

css代碼:

li:nth-of-type(2) {
background: rgba(255, 10, 230, 0.5);
transform: rotateX(90deg) translateZ(100px)   
}

li:nth-of-type(3) {
background: rgba(0, 10, 230, 0.5);
transform: rotateX(90deg) translateZ(-100px)
}

//上下面結束

 

//左右面

左右面的原理跟上下面一樣,只不過是沿着Y軸旋轉,這樣才能形成左右面
li:nth-of-type(4) {
background: rgba(25, 100, 230, 0.5);
transform: rotateY(90deg) translateZ(100px)
}

li:nth-of-type(5) {
background: rgba(0, 10, 71, 0.5);
transform: rotateY(90deg) translateZ(-100px)
}

//左右面結束

 

//前后面:前后面不用旋轉,直接一個往前走邊長一半,一個向后走一半即可

li:nth-of-type(1) {

background: rgba(40, 200, 100, 1);

transform: translateZ(100px)

}

li:nth-of-type(6) {
background: rgba(255, 35, 30, 0.5);
transform: translateZ(-100px)
}

 

寫完以上代碼后,立方體就已經完成了,但是此時你看到的還是跟上面的圖1一樣,那是因為我們的視角-webkit-perspective:為0,就像你坐在教室,左中右三列,如果你坐在中間一列,那么你看到講台上的粉筆盒也只是一個正方形,而非一個立方體。想要看到立方體的效果,你可以轉換你的視角,設置ul的-webkit-perspective:為100PX或者其他像素;;;也可以把粉筆盒子旋轉或者傾斜一下 ,設置Ul的 transform: rotateX(-45deg)  rotateY(-45deg) ,此時你應該能看到:

還可以給ul添加一個過渡效果:  transition: all 0.5s; 

ul:hover{ transform: rotateX(80deg) rotateY(-45deg); }

至此,3D立方體我們就已經完成了。下面做3D骰子的效果。

 

2 :實現3D骰子

首先定義好一個動畫:

@-webkit-keyframes run {
0% {
transform: rotateX(900deg) rotateY(6000deg) translateY(-400px)
}
100% {
transform: rotateX(0deg) rotateY(0deg) translateY(0px)
}
}

動畫大家自己寫,上面的動畫僅僅提供了一個旋轉下落的效果,僅作為一個思路的參考

點擊骰子的時候給UL添加一個類,注意animation里面的動畫名要跟外面ke-yframes的名對應,

.run {
     animation: run 5s ease; (動畫名  持續時間 速度)  //animation總有8個參數
}

寫完動畫效果后,還要實現骰子的功能,下面是我自己的思路:

var arr = ["red", "black", "green", "purple", "pink", "blue"] //  自己定義的LI的顏色
var arr2 = [1, 2, 3, 4, 5, 6]

定義好6個數字,每次點擊骰子的時候讓顏色arr1以及數字arr2進行隨機排序,然后重新插回LI中。

由於我們動畫結束后,每次展示的都是第一個li的數字及顏色,我們點擊時對數字隨機排序,從而實現雖然每次展示的都是第一個Li,但是第一個li的顏色以及數字都是隨機的,模擬骰子的效果

關鍵代碼如下:

var o = document.querySelector(".wrap");
var l = document.querySelectorAll(".wrap li");

 

arr.sort(function() {
return Math.random() - 0.5
})
arr2.sort(function() {
return Math.random() - 0.5
})
var that = this;
that.classList.remove("run");

for (var i = 0; i < l.length; i++) {
    l[i].innerHTML = arr2[i];
   l[i].style.backgroundColor = arr[i]
}
setTimeout(function() {

o.onclick = numClick;
}, 5100)


setTimeout(function(argument) {
that.classList.add("run");
}, 0)

}

說明:

每次點擊前先移除原有的run類名,再重新添加run類,從而實現每次點擊的動畫效果;

點擊后,讓點擊事件暫時為Null,防止用戶重復點擊,動畫結束后再恢復點擊事件(本例動畫為5000MS , 則在5100ms后讓事件恢復)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM