CSS3實現(xiàn)超炫3D翻書效果(一)

基礎(chǔ)知識儲備

-transform:CSS3新增的變形功能,其優(yōu)點是全過程不改變DOM性能更高。在transform下有如下幾個變形樣式:
1).translate() --- 位置改變(平移)
2).scale() --- 縮放比例
3)rotate() --- 旋轉(zhuǎn)角度
4)skew() --- 傾斜(斜切)
以上的幾個形式都支持X軸、Y軸、Z軸的變換方向。
但需要注意:
1)要使用3D變換,需要在其父級開啟3D空間:transform-style: preserve-3d;
2)在變形過程中,會出現(xiàn)“抖動”效果,這時我們需要在該元素的該變形屬性加初始值:transform:rotateY(0deg);
3)要想查看到超炫的3D效果還要設(shè)置下景深/透視,transform:perspective(800px) ;這個可以都當(dāng)前元素加或給其元素父級加
-當(dāng)設(shè)置transform:rotate(30deg);旋轉(zhuǎn)角度時可指定其旋轉(zhuǎn)的奇點。transform-origin: x坐標(biāo) y坐標(biāo);

原理級思路

核心思想,這個展示區(qū)分為左右兩部分。
html布局如下:

/* box為整個頁面展示區(qū) */
<div id="box">  
    /* page有前后兩面 */
   <div class="page">   
      <div class="front"></div>
      <div class="back"></div>  
  </div>   
  /* page2為翻頁之后顯示的*/ 
<div class="page2"></div>
</div>

1.當(dāng)未翻頁前,頁面展示如下圖:


整個展示區(qū)(box)分為左右兩個部分,這里我們給box一個背景圖(0.png);然后再給page-front(正面)一個相同背景圖(0.png),并把front定在展示區(qū)的右側(cè)。其實我們看到的一張圖是由兩個相同(但大小原圖為一半)的圖組成。
2.當(dāng)未翻頁前,頁面展示如下圖:



當(dāng)翻頁后,整個展示區(qū)依然為兩部分,左部分為page-back(背面,背景圖(1.png)),右部分為page2背景圖(1.png)。
需要注意的一點就是,當(dāng)page-front進(jìn)行翻頁的旋轉(zhuǎn)奇點為左邊。
css布局代碼如下:

/* 將頁面展示區(qū)box設(shè)置寬高背景 */
#box{    
  background: url("img/0.jpg") no-repeat;  
  width:700px;    height:400px;   
  /* 此處是為了讓Box在中間顯示 */
  margin:100px auto;
  position: relative;
}
  /* 設(shè)定page的位置 */
#box .page{ 
    /* 因為其在展示區(qū)右側(cè),所以寬度為整個box的一般,并定在右側(cè) */
    width: 50%;    height: 100%; 
    top:0; right:0;
    position: absolute;  
    /* 將開啟3d空間,方便翻頁后front和back的3d變換 */
    transform-style: preserve-3d; 
    /* 奇點設(shè)為左邊 */
    transform-origin: left center;
    /* 設(shè)置翻書(旋轉(zhuǎn))的運動時間,運動形式 */   
    transition:1s all ease;  
    /* 提升層級否則會被蓋住 */
    z-index:2; 
    /* 設(shè)置景深來更好的展示3D效果,并給旋轉(zhuǎn)角度一個初始值,防止抖動發(fā)生 */
   transform:perspective(800px) rotateY(0deg);
}
/* 配置旋轉(zhuǎn)頁的前頁 */
.page .front{    
     /* 寬高與父級page一樣 */
     width:100%; height: 100%;   
     position: absolute;  
     left:0; top: 0;
    /* 將背景設(shè)成為與前一頁相同的背景,并且只要右面的那部分,與頁面左部分拼接 */
     background: url("img/0.jpg") right top no-repeat; 
   /* backface-visibility屬性和3D transform效果相關(guān),它決定當(dāng)一個元素的背面面是否可見 */ 
     backface-visibility: hidden;  
   /* 提升層級否則會被蓋住 */
     z-index:2;
}
/* 配置旋轉(zhuǎn)頁的后頁 */
.page .back{   
     /* 寬高與父級page一樣 */
    width:100%; height: 100%;
     /* 將背景設(shè)成為與下一頁相同的背景,并且只要左面的那部分,與右部分的page2拼接 */
    background: url("img/1.jpg") left top no-repeat;    
    position: absolute;
    left:0;    top: 0;    
    /* 這里設(shè)置將back進(jìn)行水平方向上的鏡像變化,因為當(dāng)page旋轉(zhuǎn)180°后, back顯示的效果不對*/
    transform: scale(-1,1); 
    /* 改變層級避免蓋住其他頁面 */  
    z-index:1;
}
/* 配置pages展示區(qū) */
#box .page2{   
   /* 因為其只在頁面右側(cè)展示所以寬為Box的一半 */ 
    width: 50%;height: 100%;  
    top:0;right:0;   
    position: absolute;
    /* 將背景設(shè)成為與下一頁相同的背景,并且只要右面的那部分,與左部分(.page .back)拼接 */  
   background: url("img/1.jpg") right top no-repeat
    /* 改變層級避免蓋住其他頁面 */   
   z-index:1;
}

下面我們通過js來控制page進(jìn)行翻頁(沿著Y軸反向旋轉(zhuǎn)180°)就可以了
js代碼如下:

var oBox = document.getElementById('box');
var oPage  = document.querySelector('.page');
oBox.onclick = function(){   
   oPage.style.WebkitTransform = 'perspective(800px) rotateY(-180deg)';
};

這里只是簡單的針對兩個圖片來實現(xiàn)翻書的效果。
如下圖:


ps:非常感謝尼古拉斯?屌?大斌哥,生動的講解旋轉(zhuǎn)時的X軸、Y軸、Z軸及其正方向。

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

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

  • CSS里transform變形這個屬性有點學(xué)習(xí)難度,尤其在CSS3里加上了3D效果之后,2維變3維學(xué)習(xí)成本更是成倍...
    張歆琳閱讀 28,367評論 5 81
  • 關(guān)于css3變形 CSS3變形是一些效果的集合,比如平移、旋轉(zhuǎn)、縮放和傾斜效果,每個效果都被稱作為變形函數(shù)(Tra...
    hopevow閱讀 6,564評論 2 13
  • 看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 1,963評論 0 4
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,752評論 0 7
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,112評論 0 2

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