CSS3 3D制作实战案例分析


Posted in HTML / CSS onSeptember 18, 2016

一、前言
 
上一节,介绍了基础的CSS3 3D动画原理实现,也举了一个小小的例子来演示,但是有朋友跟我私信说想看看一些关于CSS3 3D的实例,所以在这里为了满足一下大家的需求,同时也为了以后能够更好的巩固CSS3 3D的知识,所以在这里写下这篇博文,希望能够帮助你更好的理解3D的制作和实现原理,同时也欢迎各位小伙伴对文中的错误给予指正 
 
二、入门案例分析
 
这里先说一说我的规划,我打算先从入门级的案例入手,然后依次递推,最后要达到的效果是,理解完所有的例子的设计思路,基本上CSS3-3D制作就能够随心所欲。
 
1、矩形图片翻滚效果
 
这个效果比较简单,所以在这里就不多做解释了,先来复习一下上一节说的要创建一个3D环境,我们需要创建一个“灯光”,“舞台”,“演员”(相当于perspective、preserve-3d、image),不清楚的小伙伴请看这里,具体的代码如下:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Document</title>  
  6.     <style type="text/css">  
  7.         div div img{   
  8.             width:300px;   
  9.             height:300px;   
  10.             position:absolute;   
  11.             /* -webkit-transition: all 0.8s; */   
  12.         }   
  13.         div div{   
  14.             -webkit-transition: all 1s;   
  15.         }   
  16.         #img1{   
  17.             -webkit-transform: translateZ(150px);   
  18.             /* -webkit-transition: all 0.8s; */   
  19.         }   
  20.         #img2{   
  21.             -webkit-transform: rotateX(-90deg) translateZ(150px);   
  22.             /* -webkit-transition: all 0.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.         /* div div:hover{   
  37.             -webkit-transform: rotateX(270deg);   
  38.         } */   
  39.     </style>  
  40. </head>  
  41. <body>  
  42.     <div style="margin-left: 100px;height:300px;width:300px;position:absolute;perspective: 1000px;">  
  43.         <div id="box" style="transform-style: preserve-3d;height:300px;width:300px;position: relative;">  
  44.             <img id="img1" src="1.jpg" />  
  45.             <img id="img2" src="2.jpg" />  
  46.             <img id="img3" src="3.jpg" />  
  47.             <img id="img4" src="4.jpg" />  
  48.             <img id="img5" src="5.jpg" />  
  49.             <img id="img6" src="6.jpg" />  
  50.         </div>  
  51.     </div>  
  52.     <div style="margin-left: 700px;margin-top: 100px;">  
  53.         <input id="btn1" type="button" value="向上翻转90度" />  
  54.         <input id="btn2" type="button" name="" value="向左翻转90度" />  
  55.         <input id="btn3" type="button" value="向右翻转90度" />  
  56.         <input id="btn4" type="button" name="" value="向下翻转90度" />  
  57.     </div>  
  58.     <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>  
  59.     <script>  
  60.         var x=0;   
  61.         var y=0;   
  62.         var box=$("#box");   
  63.         $('#btn1').on("click",function(){   
  64.             var value=90+x*90;   
  65.             box.css("-webkit-transform","rotateX("+value+"deg)");   
  66.             x++;   
  67.         });   
  68.         $('#btn2').on("click",function(){   
  69.             var value=y*90+90;   
  70.             box.css("-webkit-transform","rotateY("+value+"deg)");   
  71.             y++;   
  72.         });   
  73.         $('#btn3').on("click",function(){   
  74.             y--;   
  75.             var value=y*90;   
  76.             box.css("-webkit-transform","rotateX("+value+"deg)");   
  77.   
  78.         });   
  79.         $('#btn4').on("click",function(){   
  80.             x--;   
  81.             var value=x*90;   
  82.             box.css("-webkit-transform","rotateX("+value+"deg)");   
  83.                
  84.         });   
  85.     </script>  
  86. </body>  
  87. </html>    
  88.   

CSS3 3D制作实战案例分析

分析
 
虽然这个思路浅显易懂,但是作为本文的第一个例子还是想为大家尽量清晰的分析清楚,
 
1、首先我们创建了一个“灯光”persepctive用来产生3D变化的效果的
 
2、然后我们创建了一个“舞台”  transform-style: preserve-3d
 
3、创建“演员”,这里的演员指的是每张的图片,在创建的时候要根据你最终要呈现的形态进行建模,也即是平移旋转之类的操作
 
脚本的编写:在编写脚本的时候有一点是需要注意的,当你把图片旋转90度的时候,如果第二次还是设置90度,那么这个图片是不会发生变化的,因为图片的变化(旋转)是以初始位置为基准的,所以相对于初始位置两次的90度都是一样的所以没有任何的效果。这个在制作的时候,留意一下即可
 
2、矩形自动旋转效果
 
按照上面的例子进行整改,要实现自动的旋转其实就是定义一个keyframes的运动规则,然后在把这个keyframes套接到animation中,即可实现CSS自动旋转的功能
 
部分的CSS3代码

CSS Code复制内容到剪贴板
  1. div div{   
  2.             animation:route 10s infinite ease-in-out;    
  3.         }   
  4. //keyframes运动规则   
  5. @-webkit-keyframes route{   
  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制作实战案例分析

 三、CSS3 3D使用特效制作与分析
 
 1、模拟卡牌翻转效果
 
这个我就不多说怎样制作了,先上效果,图片是来源于蜗牛的,如有侵犯请告知

CSS3 3D制作实战案例分析

 

这个虽然是归类到3D的范围内,但是在使用的时候由于不需要产生平行四边形的变换效果(这个的具体效果详见博主的另外一篇博文),所以不需要使用perspective这个属性,但是确实需要使用到CSS3 3D常见效果中的翻转属性(rotate[X,Y,Z]),这个的具体原理也是简单,但是在使用的时候有两点是需要注意的。
 
一)、因为旋转是相对于卡牌的整体的旋转,也就是两个面都要旋转,所以hover事件要相对于卡牌整体,如果是相对于某一个面的话,那么会出现一个面旋转,而另外一个面不旋转的现象
 
二)、在制作的过程中使用了一个比较少见的属性:backface-visibility,这个属性是为了见图片的背面设置为不可见,从而达到实现翻转的效果
 
具体代码见文章最后
 
2、CSS3 3D轮播
 
说到CSS3 3D轮播主要我们可以分成这样的三类,一类是自动播放的轮播图,另外一类是响应点击事件的轮播图,第三类是两者的结合,即自动播放又响应点击事件,这里我们主要讨论的是前两者,第三类比较复杂这里我们就不多做解释,以后有机会再来跟大家探讨探讨
 
2.1 自动轮播图
 
这个的原理我们已经在前面中多次提到了,但是各位要注意一个地方,在keyframes中设置如:
 
@keyframes test{
   o%,
   12.5%:{………………}
}

这样的一种形式可以实现轮播图的短暂停留。
 
好了看一下效果了:

CSS3 3D制作实战案例分析

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

CSS3 3D制作实战案例分析

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

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

HTML / CSS 相关文章推荐
浏览器实现移动端高性能css3动画(开启gpu加速)
Dec 23 HTML / CSS
css3中transition属性详解
Sep 02 HTML / CSS
CSS3中box-shadow的用法介绍
Jul 15 HTML / CSS
CSS3实现复选框动画特效示例代码
Sep 27 HTML / CSS
基于HTML5的WebSocket的实例代码
Aug 15 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
Mar 17 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
May 12 HTML / CSS
HTML5实现文件断点续传的方法
Jan 04 HTML / CSS
canvas 实现 github404动态效果的示例代码
Nov 15 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
Jul 26 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
Aug 21 HTML / CSS
CSS实现九宫格布局(自适应)的示例代码
Feb 12 HTML / CSS
CSS3中动画属性transform、transition和animation属性的区别
Sep 25 #HTML / CSS
利用CSS3实现毛玻璃效果示例源码
Sep 25 #HTML / CSS
CSS3实现简易版的刮刮乐效果
Sep 27 #HTML / CSS
纯DOM+CSS3实现简单的小风车动画
Sep 27 #HTML / CSS
灵活运用CSS3特性绘制简易版围棋效果
Sep 28 #HTML / CSS
CSS3 media queries + jQuery实现响应式导航
Sep 30 #HTML / CSS
CSS3中的元素过渡属性transition示例详解
Nov 30 #HTML / CSS
You might like
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
php json转换相关知识(小结)
2018/12/21 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
javascript 精粹笔记
2010/05/09 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
土木工程个人自荐信范文
2013/11/30 职场文书
机关作风建设整改方案
2014/10/27 职场文书
接待员岗位职责
2015/02/13 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技