1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 *{ 8 padding: 0; 9 margin: 0; 10 } 11 .stage{ 12 display: flex; 13 14 perspective: 1500px; 15 } 16 .void{ 17 clear: both; 18 } 19 .container{ 20 21 width: 500px; 22 height: 400px; 23 /*通过改变height也可以改变是俯视还是仰视效果*/ 24 25 margin: 0 auto; 26 transform-style: preserve-3d; 27 } 28 .container img{ 29 30 margin: auto; 31 width: 500px; 32 height: 200px; 33 position: absolute; 34 box-shadow: grey 20px; 35 36 } 37 /* 38 39 img:nth-child(1){ 40 41 transform: rotateY(0deg) translateZ(280px) translateX(0px); 42 translateY(0px);; 43 } 44 img:nth-child(2){ 45 transform: rotateY(60deg) translateZ(280px); 46 } 47 img:nth-child(3){ 48 transform: rotateY(120deg) translateZ(280px); 49 } 50 img:nth-child(4){ 51 transform: rotateY(180deg) translateZ(280px); 52 } 53 img:nth-child(5){ 54 transform: rotateY(240deg) translateZ(280px); 55 } 56 img:nth-child(6){ 57 transform: rotateY(300deg) translateZ(280px); 58 } 59 */ 60 61 </style> 62 </head> 63 <body> 64 <div class="stage"> 65 <div class="container"> 66 <img src="相框之拼图布局/imgs/Desert.jpg" > 67 <img src="相框之拼图布局/imgs/Lighthouse.jpg"> 68 <img src="相框之拼图布局/imgs/Jellyfish.jpg"> 69 <img src="相框之拼图布局/imgs/Koala.jpg"> 70 <img src="相框之拼图布局/imgs/Tulips.jpg"> 71 <img src="相框之拼图布局/imgs/Penguins.jpg"> 72 <div class="void"></div> 73 74 </div> 75 </div> 76 <input type="button" id="button" value="点击一下"> 77 <script type="text/javascript" src="jquery-1.12.0.min.js"></script> 78 <script> 79 $(function(){ 80 var imgs=document.getElementsByTagName("img"); 81 var order=0; 82 function move() { 83 //对于每一个img元素都发生变化 84 for (var i = 0; i < imgs.length; i++) { 85 (function(index){ 86 imgs[index].cur = 60 * (index + order - 1); 87 imgs[index].target = 60 * (index + order); 88 imgs[index].timer = setInterval(function () { 89 imgs[index].speed = (imgs[index].target - imgs[index].cur) / 1000; 91 imgs[index].speed = imgs[index].speed > 0 ? Math.ceil(imgs[index].speed) : Math.floor(imgs[index].speed); 92 93 if (imgs[index].cur + imgs[index].speed == imgs[index].target) { 94 clearInterval(imgs[index].timer); 95 } else { 96 imgs[index].cur = imgs[index].cur + imgs[index].speed; 97 imgs[index].style.transform = "rotateY(" +(imgs[index].cur + imgs[index].speed) + "deg) translateZ(500px) translateY(200px)"; 98 } 99 }, 10); 100 })(i); 101 } 102 order++;
if(order>6){
order=0;
} 103 } 104 move(); 105 setInterval(move,4000); 106 }) 107 </script> 108 </body> 109 </html>
笔记:
1,解决for循环没有块级作用域的问题:
(1)使用匿名函数,传递参数
(2)使用ES6中的let,注意这儿要考虑ES6中对于浏览器的兼容性
2,如何实现3d效果
CSS3 3D效果的相关知识
当我们使用css3 的3d效果的时候,首先要知道3d效果是建立在空间坐标轴上的:
三维空间坐标轴如下:
右图所示:注意这个坐标轴是和我们常见的坐标轴是不一致的,右下角为X轴,Y轴,Z轴的正方向
在建立了坐标轴之后,下面的就是对于图片绕着坐标轴进行的旋转运动:
1,关于rotateX, rotateY, rotateZ的认识
- rotateX(angle)
- rotateY(angle)
- rotateZ(angle)
上面三个属性分别表示图像绕X 轴,图像绕Y轴 ,图像绕Z轴进行的旋转,
2,关于perspective:透视,视点
我们知道,我们在距离物体不同的距离看物体,我们其实看到的效果是不一样的,
perspective设置的像素值在显示屏上表现的效果相当于我们看显示屏的效果,
相当于显示屏是我们的眼睛,而perspective的值是坐标轴原点距离显示屏的距离
3,translateX, translateY ,translateZ:
表明物体沿着X轴,Y轴,Z轴移动的距离,当我们没有设置rotateX和rotateY的时候,Z轴是正对着我们的,当translateZ逐渐接近perspective的时候,相当于,我们看到的物体从坐标原点逐渐靠近我们,
当translateZ的值大于perspective的时候,这时候屏幕上的元素大到占满整个屏幕之后然后消失了,因为这相当于物体移动到了我们的眼睛后方,我们当然看不到了
4,perspective-orign:
表明所看舞台或者元素的中心,默认:perspective-orign:50% 50%;
5,tranform-style:flat|preserve-3d
表明是否3d透视,这个属性应用在3D变换的兄弟元素的父元素上
6 backface-visibility:hidden:
表明是否可以看到后面的元素,默认hidden,不可看到
3D效果的html结构
结构如下:
<div class="stage">
<div class="container">
<img>
<img>
<img>
<img>
</div>
</div>
.stage{
persective:800px
}
.container{
transform-style:preserve-3d
}
对于舞台和容器应用上面CSS对所有的图片应用position:absolute:共用一个中心点,但是这样我们得到的只是几张图片纠缠在一起,如何让他们分开,这里使用tanslateZ进行改变图片距离原点的距离,应用了translateZ之后,图片就会向四周扩散开来