开学了就好忙啊,Three.js 学习的进度很慢。。。
备课备课才是王道。
更一篇 JS + CSS3 的内容,做一个图片墙。
其核心要点是把图片摆成这个样子:
看上去这个布局很复杂,其实很简单。其思路是:
- 所有图片放在一个 div.box 里,并且绝对定位,方便调整位置。
- 每个图片旋转一个度数。这里有5张图,每个图旋转的度数就是 index*72。为啥 72?因为 360 / 5 = 72 。
- 然后,每张图移动 z 轴 -500px。我这里是移动 -500px,具体值大家可以自行设定。
这其实好比一群人,专向对应度数后,往前或者往后移动相同的距离,就可以刚好围城一个圈。
理解这个思路后,剩下的好办了。
HTML:
<div class="box" id="box">
<img src="../images/pic1.jpg" alt="">
<img src="../images/pic2.jpg" alt="">
<img src="../images/pic3.jpg" alt="">
<img src="../images/pic4.jpg" alt="">
<img src="../images/pic5.jpg" alt="">
</div>
CSS:
*{
margin: 0;
padding: 0;
}
.box{
width: 600px;
height: 399px;
}
body{
perspective: 2500px; /* 透视 */
height: 100vh;
overflow: hidden;
}
.box{
transform-style: preserve-3d; /* 3D 空间 */
margin-left: auto;
margin-right:auto;
margin-top: 400px;
position: relative;
animation: ani 20s linear infinite; /* 自动旋转 */
}
.box img{
position: absolute;
backface-visibility: hidden;
opacity: 0.5;
transition:all 0.2s;
}
.box img:hover{ /* 加上交互 */
opacity: 1;
}
@keyframes ani {
0%{
transform: rotateY(0);
}
100%{
transform: rotateY(360deg);
}
}
JS:
let box = document.getElementById("box");
let imgs = box.querySelectorAll("img");
// 遍历每张图片,设置每个图片的旋转 和 z轴位移。注意顺序!
imgs.forEach(function(value,index){
value.style.cssText = `
transform:rotateY( ${72*index}deg ) translateZ(-500px);
`;
});
完工~是不是超级简单~?
啊~有用的知识又增加了。