咱們來看下作一個css3 3D動畫須要哪些東西。前面咱們已經使用transition和transform作了一些簡單的操做。javascript
作3D動畫,咱們首先要設置3D場景。3D場景咱們一般用perspective和perspective-origin兩個屬性設定。
css
說明各個屬性的做用:
perspective:800;表明3D物體距離瀏覽器是800px。
perspective-origin:50% 50%;眼睛視角的中心點,分別在xy軸的50%的地方。
設置了這兩個屬性以後,瀏覽器中的物體已經變成三維物體。這個時候咱們就能夠作3D動畫了。html
transform既能夠作3D操做也能夠作2D操做,爲了區分是3D仍是2D,咱們須要加個樣式屬性。加了這個樣式以後,就表明在動畫中咱們要作3D操做。java
-webkit-transform-style:-webkit-preserve-3d;
咱們用圖片表示在三維世界裏xyz軸的方向(x軸是向右的,y軸是向下的,z軸的方向至關於從屏幕指向咱們的)。
下面咱們作一個向下翻頁的數字,和一個向作翻頁的數字。css3
<!DOCTYPE html> <html> <head> <title></title> <style> #my3dspace{ /* 設置3D場景,距離人眼800像素,原點在50% 50%的位置 */ -webkit-perspective:800; -webkit-perspective-origin:50% 50%; overflow: hidden; } #pagegroup{ width: 400px; height: 400px; margin: 0 auto; -webkit-transform-style:preserve-3d; /* 告訴瀏覽器裏面的元素進行3D轉換 */ position: relative; } .page{ position: absolute; left: 0; top: 0; width: 360px; height: 360px; padding: 20px; background: #000; color: #fff; font-weight: bold; font-size: 360px; line-height: 360px; text-align: center; } #page1{ -webkit-transform-origin:bottom; -webkit-transition:-webkit-transform 1s linear; } #page2,#page3,#page4,#page5,#page6{ -webkit-transform-origin:bottom; -webkit-transition:-webkit-transform 1s linear; -webkit-transform:rotateX(90deg); } #op{ text-align: center; margin: 40px auto; } </style> <script> var curIndex=1;//當前變量的值 function next(){ if(curIndex===6){ return; } var curPage=document.getElementById("page"+curIndex); curPage.style.webkitTransform="rotateX(-90deg)"; curIndex++; var nextPage=document.getElementById("page"+curIndex); nextPage.style.webkitTransform="rotateX(0deg)"; } function prev(){ if(curIndex===1){ return; } var curPage=document.getElementById("page"+curIndex); curPage.style.webkitTransform="rotateX(90deg)"; curIndex--; var prevPage=document.getElementById("page"+curIndex); prevPage.style.webkitTransform="rotateX(0deg)"; } </script> </head> <body> <div id="my3dspace"> <div id="pagegroup"> <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> <div id="op"> <a href="javascript:next()">next</a> <a href="javascript:prev()">previous</a> </div> </body> </html>
<!DOCTYPE html> <html> <head> <title></title> <style> #my3dspace{ /* 設置3D場景,距離人眼800像素,原點在50% 50%的位置 */ -webkit-perspective:800; -webkit-perspective-origin:50% 50%; width: 360px; overflow: hidden; margin: auto; } #pagegroup{ width: 360px; height: 360px; margin: 0 auto; -webkit-transform-style:preserve-3d; /* 告訴瀏覽器裏面的元素進行3D轉換 */ position: relative; } .page{ position: absolute; left: 0; top: 0; width: 360px; height: 360px; background: #000; color: #fff; font-weight: bold; font-size: 360px; line-height: 360px; text-align: center; } #page1{ -webkit-transform-origin:left; -webkit-transition:-webkit-transform 1s linear; } #page2,#page3,#page4,#page5,#page6{ -webkit-transform-origin:left; -webkit-transition:-webkit-transform 1s linear; -webkit-transform:rotateY(90deg); } #op{ text-align: center; margin: 40px auto; } </style> <script> var curIndex=1;//當前變量的值 function next(){ if(curIndex===6){ return; } var curPage=document.getElementById("page"+curIndex); curPage.style.webkitTransform="rotateY(-90deg)"; curIndex++; var nextPage=document.getElementById("page"+curIndex); nextPage.style.webkitTransform="rotateY(0deg)"; } function prev(){ if(curIndex===1){ return; } var curPage=document.getElementById("page"+curIndex); curPage.style.webkitTransform="rotateY(90deg)"; curIndex--; var prevPage=document.getElementById("page"+curIndex); prevPage.style.webkitTransform="rotateY(0deg)"; } </script> </head> <body> <div id="my3dspace"> <div id="pagegroup"> <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> <div id="op"> <a href="javascript:next()">next</a> <a href="javascript:prev()">previous</a> </div> </body> </html>