css3實(shí)現(xiàn)3d骰子效果

加了一周多的班,這幾天終于稍微有點(diǎn)空的時間了。這個3d動態(tài)效果是我挺早之前做的,不過在今天以前一直都沒什么時間發(fā)上來。
進(jìn)入正題,先來看看這個效果的演示。

3d骰子效果

下面這是我個人網(wǎng)站上的效果demo
3d骰子demo

現(xiàn)在我一步步在介紹這個效果的實(shí)現(xiàn)原理。
首先,跟之前的旋轉(zhuǎn)木馬效果的步驟一樣,先搭建一個“舞臺”,設(shè)置好舞臺視距。再建好一個容器來放這個骰子。
.block{ padding: 100px 0; perspective: 800px; perspective-orign: 50% 50%; } .dice{ width: 300px; height: 300px; margin: 20px auto; position: relative; transform-style: preserve-3d; }
<div class="block"> <div class="dice"> </div> </div>
block就是舞臺,dice就是容器。給舞臺設(shè)置好舞臺視距perspective,以及觀察位置perspective-orign。在容器里面設(shè)置好transform-style: preserve-3d來設(shè)置這個動態(tài)的效果是3d的。
然后在dice容器里面加入6個div頁面,也就是骰子的6個面。
<div class="block"> <div class="dice"> <div class="page" id="page1">1</div> <div class="page" id="page2">2</div> <div class="page" id="page3">3</div> <div class="page" id="page4">4</div> <div class="page" id="page5">5</div> <div class="page" id="page6">6</div> </div> </div>
設(shè)置公共的樣式。
.page{ width: 200px; height: 200px; position: absolute; font-size: 200px; color: #fff; line-height: 200px; text-align: center; border: 1px solid gray; background:rgb(88,88,88); }
看看現(xiàn)在頁面的樣子。

1

因?yàn)槲恢枚际且粯拥?,所以這6個頁面都疊在了一起。

然后我們給這個6個頁面都單獨(dú)的設(shè)置一下他們擺放的位置。
#page2{ transform: rotateY(-90deg); transform-origin: right; } #page3{ transform: translateZ(-200px); transform-origin: right; } #page4{ transform: rotateY(90deg); transform-origin: left; } #page5{ transform: rotateX(-90deg); transform-origin: top; } #page6{ transform: rotateX(90deg); transform-origin: bottom; }

這里介紹一下這幾個設(shè)置,rotateX和rotateY的效果就是沿X軸或者Y軸進(jìn)行旋轉(zhuǎn)。但在旋轉(zhuǎn)的時候必須設(shè)置一下transform-origin。這個參數(shù)是設(shè)置旋轉(zhuǎn)的位置,默認(rèn)是沿著X軸或者Y軸的中心來進(jìn)行旋轉(zhuǎn)。我們根據(jù)每個頁面需要旋轉(zhuǎn)的方向來設(shè)置旋轉(zhuǎn)線的位置。translateZ在之前我們就用過了,這個參數(shù)的功能是沿著舞臺視距來進(jìn)行移動。

設(shè)置好各自的樣式之后,再看看頁面的效果。

2

呃,怎么還是只能看到一個頁面。我們需要看到另外的幾個頁面,這怎么辦。我們只要把每個頁面的背景色設(shè)置成有點(diǎn)透明就行了。

把.page樣式下的background改成如下所示,加一個50%的透明。
background:rgba(88,88,88,0.5);
現(xiàn)在我們再來看看頁面上的效果

3

現(xiàn)在可以看到后面的頁面了,這些頁面都已經(jīng)正確的到了各自的位置上了。

到現(xiàn)在,靜態(tài)的骰子已經(jīng)做好了,但是我們需要讓它動起來。跟之前的方法一樣,我們只需要給這個容器加上動畫效果,這個骰子就會動起來了。
跟之前一樣,我們需要用到關(guān)鍵幀動畫效果,并把這個動畫效果加到容器上。
@keyframes random-rotate{ 0%{ transform:rotateX(0deg) rotateY(0deg); } 100%{ transform:rotateX(360deg) rotateY(360deg); } }
.dice{ width: 300px; height: 300px; margin: 20px auto; position: relative; transform-style: preserve-3d; animation: random-rotate 5s linear 0s infinite; }
這個關(guān)鍵幀的效果就是X軸和Y軸都一起從0度變到360度。而在綁定關(guān)鍵幀的時候,我們設(shè)置了這個動畫的變化時間為5s,線性平滑變化,并讓他無限循環(huán)。

這樣就都OK,大功告成了。不過不知道你有沒有發(fā)現(xiàn),這個東西有個小bug,骰子的幾個頁面在旋轉(zhuǎn)之后,數(shù)字顯示已經(jīng)反了。如果小伙伴們?nèi)绻眠@個例子,就得自己想辦法搞定了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,119評論 0 2
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,437評論 0 11
  • 關(guān)于css3變形 CSS3變形是一些效果的集合,比如平移、旋轉(zhuǎn)、縮放和傾斜效果,每個效果都被稱作為變形函數(shù)(Tra...
    hopevow閱讀 6,567評論 2 13
  • 看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 1,969評論 0 4
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,752評論 0 7

友情鏈接更多精彩內(nèi)容