CSS3 3D相冊(cè)

3D album.gif

今天來(lái)做一個(gè)基于CSS3 3D屬性的3D相冊(cè)效果。

1 基本布局

首先來(lái)完成基本布局,從效果圖中可以看到,所有圖片一開始均位于同一位置,然后經(jīng)過不同的角度的旋轉(zhuǎn)以及平移到不同的位置,達(dá)到一個(gè)"旋轉(zhuǎn)散開"的效果。所以基本的思路就是:

  • 所有圖片定位到頁(yè)面中同一位置
  • 遍歷圖片,利用transform屬性進(jìn)行旋轉(zhuǎn)、平移,加上transition制造動(dòng)畫效果
  • 調(diào)整perspective,改變視角

所有首先來(lái)完成基本布局:

<!DOCTYPE html>
<html>
    <head>
        <meta charst="utf-8">
        <title>3D相冊(cè)</title>

        <style>
            * {
                margin: 0px;
                padding: 0px;
            }
            body {
                background-color: #000;
            }

            .images {
                width: 100px;
                height: 100px;
                margin: 150px auto;
                position: relative;
            }

            .images img {
                position: absolute;
                box-shadow: 0px 0px 8px #eee;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <div id="warp" class="images">
                <img src="images/01.png">
                <img src="images/02.png">
                <img src="images/03.png">
                <img src="images/04.png">
                <img src="images/05.png">
                <img src="images/06.png">
                <img src="images/07.png">
                <img src="images/08.png">
                <img src="images/09.png">
                <img src="images/10.png">
                <img src="images/11.png">
            </div>
        </div>
    </body>
</html>
3d_album1.png

現(xiàn)在所有圖片都重疊到了一起。

2 旋轉(zhuǎn)、平移

接下來(lái)我們需要對(duì)各個(gè)圖片進(jìn)行旋轉(zhuǎn)、平移。從圖中可以看到,所有的圖片都是繞Y軸進(jìn)行了一定的旋轉(zhuǎn),所有首先來(lái)給各個(gè)圖片加上一個(gè)旋轉(zhuǎn)效果,之于旋轉(zhuǎn)角度則各個(gè)圖片平分:

<script>
    window.onload = function() {
        var wrap = document.getElementById('wrap');
        var images = document.getElementsByTagName("img");
        var length = images.length;
        var deg = 360 / length;
        for(var i = 0; i < length; i++) {
          var transform = "rotateY(" + deg * i + "deg) ";
          images[i].style.transform = transform;
        } 
    }
</script>
3d_album2.png

可以看到,圖片已經(jīng)出現(xiàn)了不同程度的旋轉(zhuǎn),但是依然是重疊在一起的。所以接下來(lái)就是讓各個(gè)圖片"分開":按Z軸方向進(jìn)行平移:

    window.onload = function() {
        var wrap = document.getElementById('wrap');
        var images = document.getElementsByTagName("img");
        var length = images.length;
        var deg = 360 / length;
        for(var i = 0; i < length; i++) {
          var transform = "rotateY(" + deg * i + "deg) tranlateZ(240px)";
          images[i].style.transform = transform;
        } 
    }
3d_album3.png

可以看到,圖片進(jìn)行了平移,也達(dá)到了"展開"的效果,但由于均處于同一平面,從用戶角度觀察,依然存在重疊。

3 改變視角

為了解決重疊問題,需要改變視角,這時(shí)就需要用到perspective + transform

  • 利用perspective指定視角距離
  • 然后通過旋轉(zhuǎn)改變視角
  • 另外由于視角的改變,在進(jìn)行transform時(shí)需要設(shè)定transform-style
.container {
  perspective: 1000px; /*perspective屬性指定了觀察者與Z=0平面的距離*/

}

.images {
  width: 100px;
  height: 100px;
  margin: 150px auto;
  position: relative;
  transform: rotateX(-50deg) ;
  transform-style: preserve-3d;
}
3d_album4.png

可以看到,圖片已經(jīng)均勻展開了。

4 動(dòng)畫效果

最后我們?cè)賮?lái)給圖片的運(yùn)動(dòng)加上動(dòng)畫效果:transition屬性上場(chǎng)了。為了然動(dòng)畫看起來(lái)不凌亂,我們可以通過transition中的延遲來(lái)完成:

window.onload = function() {
  var wrap = document.getElementById('wrap');
  var images = document.getElementsByTagName("img");
  var length = images.length;
  var deg = 360 / length;
  for(var i = 0; i < length; i++) {
    var transform = "rotateY(" + deg * i + "deg) translateZ(240px)";
    var transition = "1s " + 0.2 * i + "s";  // 通過延遲讓圖片運(yùn)動(dòng)排隊(duì)
    images[i].style.transform = transform;
    images[length - i - 1].style.transition = transition;
  } 
}

大功告成!

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

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

  • 看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 1,969評(píng)論 0 4
  • css3漸變生成工具 文本 text-overflow clip 隱藏超出文本 ellipsis 超出部分使用省略...
    DeeJay_Y閱讀 1,255評(píng)論 0 0
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,437評(píng)論 0 11
  • 今天天氣好晴朗處處好風(fēng)光伴隨著好天氣的到來(lái)心情都更加明朗了呢是不是該學(xué)點(diǎn)燒腦的內(nèi)容了呢傻球也要出來(lái)曬曬太陽(yáng)咯~ C...
    Iris_mao閱讀 705評(píng)論 0 2
  • ————羽月痕 古道長(zhǎng)亭山外山, 風(fēng)吹稻香說豐年。 辭去萬(wàn)里秋不度, 韻得枯黃一片天。
    羽月痕閱讀 275評(píng)論 0 2

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