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

來源:互聯網
上載者:User

標籤:

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後讓事件恢複)

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.