前端手写自动旋转3D立方体

老子叫甜甜 提交于 2019-12-17 21:16:26

上一篇咱们写了一个3D的立方体,但是不能自己旋转,触摸之后可以进行旋转,现在是升级版的是自动旋转的立方体
下面直接是代码

<template>
  <div>
    <div class="top">懵懵懂懂</div>
    <div class="wrap">
      <div class="cube">
        <div class="out-front">
          <img
            src="./../assets/images/psb (11).jpg"
            alt=""
          >
        </div>
        <div class="out-back">
          <img
            src="./../assets/images/psb (12).jpg"
            alt=""
          >
        </div>
        <div class="out-left">
          <img
            src="./../assets/images/psb (19).jpg"
            alt=""
          >
        </div>
        <div class="out-right">
          <img
            src="./../assets/617/微信图片_20191213093412.jpg"
            alt=""
          >
        </div>
        <div class="out-top">
          <img
            src="./../assets/images/psb (38).jpg"
            alt=""
          >
        </div>
        <div class="out-bottom">
          <img
            src="./../assets/images/psb (43).jpg"
            alt=""
          >
        </div>
      </div>
    </div>
  </div>

</template>

<script>
export default {
  data () {
    return {

    }
  },
  components: {
  }
}
</script>

<style scoped lang="less">
* {
  margin: 0 auto;
  padding: 0;
}
html {
  background: #222;
}
div.wrap {
  width: 4.5rem;
  perspective: 1000px; /*景深*/
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translateX(-50%) translateY(-50%); /*利用位移来处理垂直水平居中*/
}
.wrap > div.cube {
  width: 4.5rem;
  height: 4.5rem;
  position: relative;
  transform-style: preserve-3d;
  transform: rotateX(-50deg) rotateY(-50deg) rotateZ(0deg); /*旋转*/
  animation: move 8s infinite linear; /*动画*/
}
.wrap > div.cube img {
  width: 100%;
  height: 100%;
}
/*关键帧*/
@keyframes move {
  0% {
    transform: rotateX(0deg) rotateY(0deg);
  }
  100% {
    transform: rotateX(360deg) rotateY(360deg);
  }
}
.cube > div {
  width: 100%;
  height: 100%;
  position: absolute;
  background: #000;
  // border-radius: 20px;
  transition: background 0.4s ease-in-out, box-shadow 0.4s ease-in-out; /*过渡 属性 时间 过渡曲线*/
}
.cube:hover > div {
  background: currentColor;
  box-shadow: 0 0 20px currentColor;
}
.cube div.out-front {
  transform: translateZ(2.25rem); /*转换  位移*/
}
.cube div.out-back {
  transform: translateZ(-2.25rem) rotateY(180deg); /*转换 位移 旋转*/
}
.cube div.out-left {
  transform: translateX(-2.25rem) rotateY(-90deg);
}
.cube div.out-right {
  transform: translateX(2.25rem) rotateY(90deg);
}
.cube div.out-top {
  transform: translateY(-2.25rem) rotateX(90deg);
}
.cube div.out-bottom {
  transform: translateY(2.25rem) rotateX(-90deg);
}
.top {
  height: 1.6rem;
  width: 100%;
  background: #fc8095;
  font-size: 0.533333rem; /* 40/75 */
  font-family: STKaiti, LiSu, KaiTi;
  text-align: center;
  line-height: 1.6rem;
}
</style>

由于是在移动端写的,所以用rem单位作为适配

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!