CSS3 3D制作实战案例分析

两岸青山对峙,绿树滴翠。一个真正的旅行家必是一个流浪者,经历者流浪者的快乐诱惑和探险意志。旅行必须流浪式,否则便不成其为旅行。

一、前言

上一节,介绍了基础的CSS3 3D动画原理实现,也举了一个小小的例子来演示,但是有朋友跟我私信说想看看一些关于CSS3 3D的实例,所以在这里为了满足一下大家的需求,同时也为了以后能够更好的巩固CSS3 3D的知识,所以在这里写下这篇博文,希望能够帮助你更好的理解3D的制作和实现原理,同时也欢迎各位小伙伴对文中的错误给予指正

二、入门案例分析

这里先说一说我的规划,我打算先从入门级的案例入手,然后依次递推,最后要达到的效果是,理解完所有的例子的设计思路,基本上CSS3-3D制作就能够随心所欲。

1、矩形图片翻滚效果

这个效果比较简单,所以在这里就不多做解释了,先来复习一下上一节说的要创建一个3D环境,我们需要创建一个“灯光”,“舞台”,“演员”(相当于perspective、preserve-3d、image),不清楚的小伙伴请看这里,具体的代码如下:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPEhtml>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Document</title>
  6. <styletype="text/css">
  7. divdivimg{
  8. width:300px;
  9. height:300px;
  10. position:absolute;
  11. /*-webkit-transition:all0.8s;*/
  12. }
  13. divdiv{
  14. -webkit-transition:all1s;
  15. }
  16. #img1{
  17. -webkit-transform:translateZ(150px);
  18. /*-webkit-transition:all0.8s;*/
  19. }
  20. #img2{
  21. -webkit-transform:rotateX(-90deg)translateZ(150px);
  22. /*-webkit-transition:all0.8s;*/
  23. }
  24. #img3{
  25. -webkit-transform:rotateZ(180deg)translateZ(-150px);
  26. }
  27. #img4{
  28. -webkit-transform:rotateX(90deg)translateZ(150px);
  29. }
  30. #img5{
  31. -webkit-transform:rotateY(90deg)translateZ(150px);
  32. }
  33. #img6{
  34. -webkit-transform:rotateY(-90deg)translateZ(150px);
  35. }
  36. /*divdiv:hover{
  37. -webkit-transform:rotateX(270deg);
  38. }*/
  39. </style>
  40. </head>
  41. <body>
  42. <divstyle="margin-left:100px;height:300px;width:300px;position:absolute;perspective:1000px;">
  43. <divid="box"style="transform-style:preserve-3d;height:300px;width:300px;position:relative;">
  44. <imgid="img1"src="1.jpg"/>
  45. <imgid="img2"src="2.jpg"/>
  46. <imgid="img3"src="3.jpg"/>
  47. <imgid="img4"src="4.jpg"/>
  48. <imgid="img5"src="5.jpg"/>
  49. <imgid="img6"src="6.jpg"/>
  50. </div>
  51. </div>
  52. <divstyle="margin-left:700px;margin-top:100px;">
  53. <inputid="btn1"type="button"value="向上翻转90度"/>
  54. <inputid="btn2"type="button"name=""value="向左翻转90度"/>
  55. <inputid="btn3"type="button"value="向右翻转90度"/>
  56. <inputid="btn4"type="button"name=""value="向下翻转90度"/>
  57. </div>
  58. <scripttype="text/javascript"src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
  59. <script>
  60. varx=0;
  61. vary=0;
  62. varbox=$("#box");
  63. $('#btn1').on("click",function(){
  64. varvalue=90+x*90;
  65. box.css("-webkit-transform","rotateX("+value+"deg)");
  66. x++;
  67. });
  68. $('#btn2').on("click",function(){
  69. varvalue=y*90+90;
  70. box.css("-webkit-transform","rotateY("+value+"deg)");
  71. y++;
  72. });
  73. $('#btn3').on("click",function(){
  74. y--;
  75. varvalue=y*90;
  76. box.css("-webkit-transform","rotateX("+value+"deg)");
  77. });
  78. $('#btn4').on("click",function(){
  79. x--;
  80. varvalue=x*90;
  81. box.css("-webkit-transform","rotateX("+value+"deg)");
  82. });
  83. </script>
  84. </body>
  85. </html>

分析

虽然这个思路浅显易懂,但是作为本文的第一个例子还是想为大家尽量清晰的分析清楚,

1、首先我们创建了一个“灯光”persepctive用来产生3D变化的效果的

2、然后我们创建了一个“舞台” transform-style: preserve-3d

3、创建“演员”,这里的演员指的是每张的图片,在创建的时候要根据你最终要呈现的形态进行建模,也即是平移旋转之类的操作

脚本的编写:在编写脚本的时候有一点是需要注意的,当你把图片旋转90度的时候,如果第二次还是设置90度,那么这个图片是不会发生变化的,因为图片的变化(旋转)是以初始位置为基准的,所以相对于初始位置两次的90度都是一样的所以没有任何的效果。这个在制作的时候,留意一下即可

2、矩形自动旋转效果

按照上面的例子进行整改,要实现自动的旋转其实就是定义一个keyframes的运动规则,然后在把这个keyframes套接到animation中,即可实现CSS自动旋转的功能

部分的CSS3代码

CSS Code复制内容到剪贴板
  1. divdiv{
  2. animation:route10sinfiniteease-in-out;
  3. }
  4. //keyframes运动规则
  5. @-webkit-keyframesroute{
  6. 0%{
  7. -webkit-transform:rotateX(90deg);
  8. }
  9. 25%{
  10. -webkit-transform:rotateX(180deg)rotateY(90deg)rotateZ(90deg);
  11. }
  12. 50%{
  13. -webkit-transform:rotateX(270deg)rotateY(180deg)rotateZ(180deg);
  14. }
  15. 75%{
  16. -webkit-transform:rotateX(360deg)rotateY(270deg)rotateZ(270deg);
  17. }
  18. }

展示效果:

三、CSS3 3D使用特效制作与分析

1、模拟卡牌翻转效果

这个我就不多说怎样制作了,先上效果,图片是来源于蜗牛的,如有侵犯请告知

这个虽然是归类到3D的范围内,但是在使用的时候由于不需要产生平行四边形的变换效果(这个的具体效果详见博主的另外一篇博文),所以不需要使用perspective这个属性,但是确实需要使用到CSS3 3D常见效果中的翻转属性(rotate[X,Y,Z]),这个的具体原理也是简单,但是在使用的时候有两点是需要注意的。

一)、因为旋转是相对于卡牌的整体的旋转,也就是两个面都要旋转,所以hover事件要相对于卡牌整体,如果是相对于某一个面的话,那么会出现一个面旋转,而另外一个面不旋转的现象

二)、在制作的过程中使用了一个比较少见的属性:backface-visibility,这个属性是为了见图片的背面设置为不可见,从而达到实现翻转的效果

具体代码见文章最后

2、CSS3 3D轮播

说到CSS3 3D轮播主要我们可以分成这样的三类,一类是自动播放的轮播图,另外一类是响应点击事件的轮播图,第三类是两者的结合,即自动播放又响应点击事件,这里我们主要讨论的是前两者,第三类比较复杂这里我们就不多做解释,以后有机会再来跟大家探讨探讨

2.1 自动轮播图

这个的原理我们已经在前面中多次提到了,但是各位要注意一个地方,在keyframes中设置如:

@keyframes test{
o%,
12.5%:{………………}
}

这样的一种形式可以实现轮播图的短暂停留。

好了看一下效果了:

2.2 CSS3触发轮播图

主要的原理是通过判断点击的次数,然后是给图片父类添加旋转的属性,这样这个功能就实现了,我们对上面的例子进行改进,效果如下所示

四、代码下载

这一次代码进行了迁移,从原本自己的服务器迁移到了git服务器,git的下载地址:https://github.com/leslieSie/CSS3_example/tree/develop

原文链接:http://www.cnblogs.com/st-leslie/p/5791714.html

本文CSS3 3D制作实战案例分析到此结束。只有使自己自卑的心灵自信起来,弯曲的身躯才能挺直;只有使自己懦弱的体魄健壮起来,束缚的脚步才能迈开;只有使自己狭隘的心胸开阔起来,短视的眼光才能放远;只有使自己愚昧的头脑聪明起来,愚昧的幻想才能抛弃!小编再次感谢大家对我们的支持!

标签: