赞
踩
上次我们简单介绍了c3的一些基础知识,我们今天来做一个小练习;
这个简单的案例是3D的一个旋转画册,那么上面是我们的一个效果图,因为不能够传视屏所以就暂时只能够截图来看一下具体结构。
正如大家所看见的,该相册由两个正方体组成,由大的正方体包裹着小的正方体,实现方式其实是用了margin或者使用定位position来实现。
其实这个画册的做法很简单,这边就不一步一步的解释了,下面我将代码粘贴出来,大家自行测试。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>3D旋转画册</title> <link rel="stylesheet" type="text/css" href="css/reset.css" /> </head> <style> #album-inner{ height: 100px; width: 100px; position: absolute; top: 45%; left: 45%; transform-style: preserve-3d; /* transform: rotateX(-30deg) rotateY(-45deg); */ /* perspective: 800px; */ animation: move 16s linear infinite; } //选择器创建move运动规则 @keyframes move{ from{ transform: rotateX(0deg) rotateY(0deg); } to{ transform: rotateX(-360deg) rotateY(-360deg); } } ul li{ height: 100%; width: 100%; position: absolute; } ul li img{ height: 100%; width: 100%; } /* 六张图片分别设置位置 */ #album-inner li:nth-of-type(1){ transform: translateZ(50px); } #album-inner li:nth-of-type(2){ transform: translateX(50px) rotateY(90deg); } #album-inner li:nth-of-type(3){ transform: translateZ(-50px); } #album-inner li:nth-of-type(4){ transform: translateX(-50px) rotateY(90deg); } #album-inner li:nth-of-type(5){ transform: translateY(-50px) rotateX(90deg); } #album-inner li:nth-of-type(6){ transform: translateY(50px) rotateX(90deg); } /* 外面的旋转 */ #album-outer{ /* transition: transfrom 3s linear !important; */ height: 160px; width: 160px; position: absolute; top: 41%; left: 42.5%; transform-style: preserve-3d; /* transform: rotateX(-30deg) rotateY(-45deg); */ /* perspective: 800px; */ animation: move 16s linear infinite; /* opacity: 0.5; */ } #album-outer li{ opacity: 0.3; transition:all 3s linear; } #album-outer li:nth-of-type(1){ transform: translateZ(80px); } #album-outer li:nth-of-type(2){ transform: translateX(80px) rotateY(90deg); } #album-outer li:nth-of-type(3){ transform: translateZ(-80px); } #album-outer li:nth-of-type(4){ transform: translateX(-80px) rotateY(90deg); } #album-outer li:nth-of-type(5){ transform: translateY(-80px) rotateX(90deg); } #album-outer li:nth-of-type(6){ transform: translateY(80px) rotateX(90deg); } </style> <body> <ul id="album-inner"> <li><img src="./img/1.jpg" alt=""></li> <li><img src="./img/2.jpg" alt=""></li> <li><img src="./img/3.jpg" alt=""></li> <li><img src="./img/4.jpg" alt=""></li> <li><img src="./img/5.jpg" alt=""></li> <li><img src="./img/6.jpg" alt=""></li> </ul> <ul id="album-outer"> <li><img src="./img/1.jpg" alt=""></li> <li><img src="./img/2.jpg" alt=""></li> <li><img src="./img/3.jpg" alt=""></li> <li><img src="./img/4.jpg" alt=""></li> <li><img src="./img/5.jpg" alt=""></li> <li><img src="./img/6.jpg" alt=""></li> </ul> </body> <script type="text/javascript" src="js/jquery3.4.1.js"></script> <script type="text/javascript"> // 设置一个点击事件点击平移外部距离 $(function(){ // 设置一个开关,判断外部闭合还是打开 var switchMove = false; var outerLi = $('#album-outer').children(); // 书写滚动函数 function move(){ if(switchMove){ $('#album-outer').css({ transition:'all 3s linear', height:'160px', width:'160px', top:'41%', left: '42.5%' }); // 内部透明 $('#album-inner li').css('opacity',1); // 外部透明 // outerLi.css('opacity',0.8); outerLi.eq(0).css({ transform: 'translateZ(80px)' }) outerLi.eq(1).css({ transform: 'translateX(80px) rotateY(90deg)' }) outerLi.eq(2).css({ transform: 'translateZ(-80px)' }) outerLi.eq(3).css({ transform: 'translateX(-80px) rotateY(90deg)' }) outerLi.eq(4).css({ transform: 'translateY(-80px) rotateX(90deg)' }) outerLi.eq(5).css({ transform: 'translateY(80px) rotateX(90deg)' }) switchMove = !switchMove; }else{ // 内部透明 // $('#album-inner li').css('opacity',0.5); // 外部透明 outerLi.css('opacity',0.6); $('#album-outer').css({ transition:'all 3s linear', height:'300px', width:'300px', left:'37.5%', top:'35.5%' }); outerLi.eq(0).css({ transform: 'translateZ(200px)' }) outerLi.eq(1).css({ transform: 'translateX(200px) rotateY(90deg)' }) outerLi.eq(2).css({ transform: 'translateZ(-200px)' }) outerLi.eq(3).css({ transform: 'translateX(-200px) rotateY(90deg)' }) outerLi.eq(4).css({ transform: 'translateY(-200px) rotateX(90deg)' }) outerLi.eq(5).css({ transform: 'translateY(200px) rotateX(90deg)' }) switchMove = !switchMove; } } // 添加事件监听 $(document).on('click',move) }) </script> </html>
这边我就只简单解释一下思路,制作3D模型最主要的是要有一个3D的思维,我这边制作3D的方式主要是将所有的面集中在一个点上(使用position),然后想象着将每个面发射出去,例如今天的案例是一个正方形,那么我们将六个面按照不同的方向发射出去相同的距离(使用translate平移),平移出去之后我们要将每个面旋转到各自相应的位置上就可以了(rotate旋转),具体操作什么模型还需要自己进行一个计算。当然最重要的要记得给父级元素添加transfrom-style,让子元素在3D空间显示。
具体让模型旋转起来,是使用@keyframes选择器定义样式,然后使用animation让他动起来,这个使用方法和jquery当中的animate很相似,作用方式和使用方式都差不多,但是使用css3会有更高的效率。
在套用我的代码时候记得自行添加图片,自行引入jquery
文章就到这里,如有错误疑问请指出,将及时修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。