Rotate3D.vue 1.73 KB
Newer Older
hucy's avatar
hucy committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
<script setup lang="ts"></script>
<template>
  <div class="content fit center">
    <section>
      <div><img src="../imgs/1.png" alt="" /></div>
      <div><img src="../imgs/2.jpg" alt="" /></div>
      <div><img src="../imgs/3.jpg" alt="" /></div>
      <div><img src="../imgs/4.jpg" alt="" /></div>
      <div><img src="../imgs/5.jpg" alt="" /></div>
      <div><img src="../imgs/6.jpg" alt="" /></div>
    </section>
  </div>
</template>
<style lang="scss" scoped>
@keyframes rotate {
  0% {
    transform: rotateY(0);
  }
  100% {
    transform: rotateY(360deg);
  }
}
.content {
  background: #000;
  // 视距
  perspective: 900px;
}
section {
  position: relative;
  width: 200px;
  height: 140px;
  cursor: pointer;
  transform-style: preserve-3d;
  animation: rotate 20s linear infinite;

  div {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    text-align: center;
    // 设置元素倒影效果 below 是倒影效果在元素下方
    // 15px是元素和倒影的距离
    // 后面的属性设置的倒影背景渐变
    -webkit-box-reflect: below 15px -webkit-linear-gradient(transparent 10%, rgba(255, 255, 255, 0.3));
    img {
      width: 100%;
      height: 100%;
    }

    &:nth-child(1) {
      transform: translateZ(200px);
    }
    &:nth-child(2) {
      transform: rotateY(60deg) translateZ(200px);
    }
    &:nth-child(3) {
      transform: rotateY(120deg) translateZ(200px);
    }
    &:nth-child(4) {
      transform: rotateY(180deg) translateZ(200px);
    }
    &:nth-child(5) {
      transform: rotateY(240deg) translateZ(200px);
    }
    &:nth-child(6) {
      transform: rotateY(300deg) translateZ(200px);
    }
  }
  &:hover {
    // 停止动画
    animation-play-state: paused;
  }
}
</style>