简单的3d旋转木马效果

1,524 阅读1分钟

需求

3D图片旋转

效果图

实现步骤

html结构

  1. 最外层容器<div class=".container">
  2. 旋转容器<ul>
  3. 图片列表<li>
<div class="container">
    <ul>
      <li><img src="./assets/rotate1.jpg"></li>
      <li><img src="./assets/rotate2.jpg"></li>
      <li><img src="./assets/rotate3.jpg"></li>
      <li><img src="./assets/rotate4.jpg"></li>
      <li><img src="./assets/rotate5.jpg"></li>
      <li><img src="./assets/rotate6.jpg"></li>
    </ul>
  </div>

css样式

  1. 最外层容器给大小位置,以及透视perspective: 1200px

给父元素设置透视属性,才能使3d属性生效,包括(rotate3d,translateZ等和z轴有关的属性)

透视指的是z=0平面与人眼的距离,perspective一般取值800px~1200px。根据近大远小的规则,适当调整图片的大小。

  1. 旋转的盒子ul设置transform-style: perserve-3d,表示transform变换基于3维坐标系(默认2维平面)
  2. 将所有图片位置重叠.container ul li {position: absolute;}
  3. 每张图片旋转角度不同,例子中含6张图片,每张旋转60度;旋转后往z轴移动一定距离。
.rotate-animation ul li:nth-child(1) {
  transform: rotateY(0deg) translateZ(300px);
}
.rotate-animation ul li:nth-child(2) {
  transform: rotateY(60deg) translateZ(300px);
}
.rotate-animation ul li:nth-child(3) {
  transform: rotateY(120deg) translateZ(300px);
}
.rotate-animation ul li:nth-child(4) {
  transform: rotateY(180deg) translateZ(300px);
}
.rotate-animation ul li:nth-child(5) {
  transform: rotateY(240deg) translateZ(300px);
}
.rotate-animation ul li:nth-child(6) {
  transform: rotateY(300deg) translateZ(300px);
}

生成静态效果,如图:

  1. 为旋转盒子ul设置旋转动画,沿Y轴旋转
@keyframes rotate {
  0% {
    transform: translate(-50%, -50%) rotateY(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotateY(360deg);
  }

translate(-50%, -50%)是为了防止旋转盒子偏离位置,保证其居中。

  1. 图像酷炫,为图片设置下方阴影-webkit-box-reflect: below 1px linear-gradient(tranparent, rgba(0, 0, 0, .5))
  2. 鼠标hover暂停旋转ul:hover { animation-play-state: paused }

完整代码见:github.com/gmx-white/c…