css3绘制3d翻页效果
2015-02-22 23:21
323 查看
核心内容:
1.css3的transition属性来制作简单的动画
transition属性可以为指定的css属性添加动画效果,这个动画用到的是transform属性transition: property duration timing-function delay;
复杂的动画效果可以用keyframes来绘制
2.css3绘制3d图形旋转效果
transform属性一看名字就知道是用来改变图形形状的,包括位移translate,旋转rotate,缩放scale。所谓的3d效果一般是由图形旋转拼凑而成的,所以这里用到了transform中的rotate值,绕着y轴旋转,定义旋转轴transform-origin: right center;绘制3d图像前要在外层设置一个3d的景深和样式perspective: 800;transform-style: preserve-3d;源代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>transition绘制翻页效果</title> <style> .btn{ margin:40px; } #book{ background-color: black; margin: 40px; width: 400px; height: 200px; padding: 0; perspective: 800; transform-style: preserve-3d; -webkit-perspective: 800; -webkit-transform-style: -webkit-preserve-3d; } #page1{ position: absolute; width: 200px; height: 200px; background-color: grey; transform-origin: right center; transition: transform 1s linear; -webkit-transition: transform 1s linear; -webkit-transform-origin: right center; } #page2, #page3, #page4{ position: absolute; width: 200px; height: 200px; background-color: grey; transition: transform 1s linear; -webkit-transition: transform 1s linear; transform-origin: right center; -webkit-transform-origin: right center; transform: rotateY(180deg); -webkit-transform: rotateY(180deg); } #left{ float: left; background-color: black; margin-left: 40px; width: 200px; height: 200px; padding: 0; overflow: hidden; perspective: 800; transform-style: preserve-3d; -webkit-perspective: 800; -webkit-transform-style: -webkit-preserve-3d; } #right{ float: left; background-color: black; width: 200px; height: 200px; padding: 0; overflow: hidden; perspective: 800; transform-style: preserve-3d; -webkit-perspective: 800; -webkit-transform-style: -webkit-preserve-3d; } #pagel1,#pagel2,#pagel3,#pagel4{ position: absolute; width: 158px; height: 158px; background-color: grey; padding: 20px; transform-origin: right center; transition: transform 1s linear; -webkit-transition: transform 1s linear; -webkit-transform-origin: right center; border: 1px solid red; } #pagel2,#pagel3,#pagel4{ transform: rotateY(180deg); -webkit-transform: rotateY(180deg); } #pager1,#pager2,#pager3,#pager4{ position: absolute; width: 158px; height: 158px; background-color: grey; padding: 20px; transition: transform 1s linear; -webkit-transition: transform 1s linear; transform-origin: left center; -webkit-transform-origin: left center; border: 1px solid red; } #pager1{ z-index: -10; } #pager2{ z-index: -20; } #pager3{ z-index: -30; } #pager4{ z-index: -40; } </style> </head> <body> <div id="book"> <div id="page1">1</div> <div id="page2">2</div> <div id="page3">3</div> <div id="page4">4</div> </div> <div class="btn"> <a href="javascript:prev()">上一页</a> <a href="javascript:next()">下一页</a> </div> <div id="left"> <div id="pagel1">第1页</div> <div id="pagel2">第3页</div> <div id="pagel3">第5页</div> <div id="pagel4">第7页</div> </div> <div id="right"> <div id="pager1">第2页</div> <div id="pager2">第4页</div> <div id="pager3">第6页</div> <div id="pager4">第8页</div> </div> <div style="clear:both;"></div> <div class="btn"> <a href="javascript:prev2()">上一页</a> <a href="javascript:next2()">下一页</a> </div> <script> var curIndex = 1; function prev(){ if(1==curIndex) return; var lPage = document.getElementById("page"+curIndex); var llPage = document.getElementById("page"+(curIndex-1)); var rPage = document.getElementById("page"+(curIndex+1)); if(llPage)llPage.style.zIndex = 100; if(rPage)rPage.style.zIndex = 0; lPage.style.transform = "rotateY(180deg)"; lPage.style.webkitTransform = "rotateY(180deg)"; curIndex--; } function next(){ if(4==curIndex) return; curIndex++; var lPage = document.getElementById("page"+curIndex); var rPage = document.getElementById("page"+(curIndex+1)); if(rPage)rPage.style.zIndex = 100; lPage.style.transform = "rotateY(0deg)"; lPage.style.webkitTransform = "rotateY(0deg)"; } var curPage = 1; function prev2(){ if(1===curPage) return; //左边翻页 var lPage = document.getElementById("pagel" + curPage); lPage.style.transform = "rotateY(180deg)"; lPage.style.webkitTransform = "rotateY(180deg)"; //右边翻页 var rPage = document.getElementById("pager" + (curPage-1)); rPage.style.transform = "rotateY(0deg)"; rPage.style.webkitTransform = "rotateY(0deg)"; curPage--; } function next2(){ if(4===curPage) return; //左边翻页 var lPage = document.getElementById("pagel" + (curPage+1)); lPage.style.transform = "rotateY(0deg)"; lPage.style.webkitTransform = "rotateY(0deg)"; //右边翻页 var rPage = document.getElementById("pager" + curPage); rPage.style.transform = "rotateY(-180deg)"; rPage.style.webkitTransform = "rotateY(-180deg)"; curPage++; } </script> </body> </html>
这里绘制了两个图形,第一个是绕中轴进行的翻页效果,这样有个问题,就是翻页后文字内容全部反了,第二个就是为了解决这个问题,做了两个3d翻页效果拼凑起来形成一个翻书的效果
相关文章推荐
- 用CSS3 Region和3D变换实现书籍翻页效果
- CSS3+JavaScript实现翻页幻灯片效果
- CSS3-2D及3D效果以及过渡
- 使用 CSS3 实现 3D 图片滑块效果
- jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
- CSS3实现3D文字动画效果
- WPF绘制3D动画效果
- jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
- jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
- css 3D 翻页效果
- css3之3D翻牌效果
- css3带阴影效果的3d旋转电影海报特效
- css3 3D盒子效果
- css3 3d效果算法分享
- css3 3D动画效果
- jquery css3问卷答题卡翻页动画效果
- [HTML5-SVG]使用raphaeljs:代替css3绘制opera图标效果
- css3 transition属性实现3d动画效果
- css3 2D和3D旋转效果
- CSS3字母卡片开关门3d效果