CSS transform 属性 实现矩形旋转

目录

一、定义和用法

二、浮动效果

三、实现拖拽


一、定义和用法

transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。

为了更好地理解 transform 属性,请查看这个演示

默认值:none
继承性:no
版本:CSS3
JavaScript 语法:object.style.transform="rotate(7deg)"

语法

transform: none|transform-functions;
描述
none定义不进行转换。
matrix(n,n,n,n,n,n)定义 2D 转换,使用六个值的矩阵。
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate(x,y)定义 2D 转换。
translate3d(x,y,z)定义 3D 转换。
translateX(x)定义转换,只是用 X 轴的值。
translateY(y)定义转换,只是用 Y 轴的值。
translateZ(z)定义 3D 转换,只是用 Z 轴的值。
scale(x,y)定义 2D 缩放转换。
scale3d(x,y,z)定义 3D 缩放转换。
scaleX(x)通过设置 X 轴的值来定义缩放转换。
scaleY(y)通过设置 Y 轴的值来定义缩放转换。
scaleZ(z)通过设置 Z 轴的值来定义 3D 缩放转换。
rotate(angle)定义 2D 旋转,在参数中规定角度。
rotate3d(x,y,z,angle)定义 3D 旋转。
rotateX(angle)定义沿着 X 轴的 3D 旋转。
rotateY(angle)定义沿着 Y 轴的 3D 旋转。
rotateZ(angle)定义沿着 Z 轴的 3D 旋转。
skew(x-angle,y-angle)定义沿着 X 和 Y 轴的 2D 倾斜转换。
skewX(angle)定义沿着 X 轴的 2D 倾斜转换。
skewY(angle)定义沿着 Y 轴的 2D 倾斜转换。
perspective(n)为 3D 转换元素定义透视视图。
属性描述
transform向元素应用 2D 或 3D 转换。
transform-origin允许你改变被转换元素的位置。
transform-style规定被嵌套元素如何在 3D 空间中显示。
perspective规定 3D 元素的透视效果。
perspective-origin规定 3D 元素的底部位置。
backface-visibility定义元素在不面对屏幕时是否可见。

二、浮动效果


<template>
  <div class="container">
    <ul class="box">
      <li class="box-back">
        <img :src="img1" />
      </li>
      <li class="box-right">
        <img :src="img2" />
      </li>
      <li class="box-left">
        <img :src="img3" />
      </li>
      <li class="box-bottom">
        <img :src="img4" />
      </li>
      <li class="box-top">
        <img :src="img5" />
      </li>
      <li class="box-front">
        <img :src="img6" />
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "transform",
  data() {
    return {
      img1: require("@/assets/image/1.webp"),
      img2: require("@/assets/image/2.webp"),
      img3: require("@/assets/image/3.webp"),
      img4: require("@/assets/image/4.webp"),
      img5: require("@/assets/image/5.webp"),
      img6: require("@/assets/image/6.webp"),
    };
  },
  props: {},
  methods: {},
  computed: {},
  mounted() {
    window.onload = function () {
      let Box = document.querySelector(".box");
      let y = -60;
      let x = 45;
      Box.onmousedown = function (ev) {
        let oEvent = ev || event;
        let disX = oEvent.clientX - y;
        let disY = oEvent.clientY - x;
        document.onmousemove = function (ev) {
          let oEvent = ev || event;
          x = oEvent.clientY - disY;
          y = oEvent.clientX - disX;
          Box.style.transform =
            "perspective(800px) rotateX(" + x + "deg) rotateY(" + y + "deg)";
        };
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
        };
        return false;
      };
    };
  },
};
</script>

<style  scoped>
.container {
  width: 100%;
  height: 100%;
  margin: 0 auto;
  padding: 50px;
  text-align: center;
  background-color: rgb(218, 218, 218);
}
.box {
  width: 300px;
  height: 300px;
  position: relative;
  margin: 300px auto;
  transform-style: preserve-3d;
  animation: change 30s linear infinite;
}
li {
  width: 100%;
  height: 100%;
  background-color: white;
  opacity: 0.9;
  list-style: none;
  border-radius: 25px;
  position: absolute;
  transition: all 1s;
  border: 1px solid black;
  font-size: 40px;
  justify-content: center;
  align-items: center;
  box-shadow: 0 0 20px rgb(255, 81, 0);
}
ul img {
  width: 100%;
  height: 100%;
  border-radius: 25px;
}
.box-back {
  transform: translateZ(-150px);
}
.box-right {
  transform: translate(150px) rotateY(90deg);
}
.box-left {
  transform: translate(-150px) rotateY(-90deg);
}
.box-bottom {
  transform: translateY(150px) rotateX(-90deg);
  /* transform-origin: bottom; */
}
.box-top {
  transform: translateY(-150px) rotateX(90deg);
}
.box-front {
  transform: translateZ(150px);
}

.box:hover .box-back {
  transform: translateZ(-220px);
}
.box:hover .box-right {
  transform: translate(220px) rotateY(90deg);
}
.box:hover .box-left {
  transform: translate(-220px) rotateY(-90deg);
}
.box:hover .box-bottom {
  transform: translateY(220px) rotateX(-90deg);
}
.box:hover .box-top {
  transform: translateY(-220px) rotateX(90deg);
}
.box:hover .box-front {
  transform: translateZ(220px);
}

@keyframes change {
  from {
    transform: rotateY(360deg) rotateX(720deg) rotateZ(-720deg);
  }
  to {
    transform: rotateY(-360deg) rotateX(-720deg) rotateZ(720deg);
  }
}
</style>

三、实现拖拽


<template>
  <div class="container">
    <ul class="box">
      <li class="box-back">
        <img :src="img1" />
      </li>
      <li class="box-right">
        <img :src="img2" />
      </li>
      <li class="box-left">
        <img :src="img3" />
      </li>
      <li class="box-bottom">
        <img :src="img4" />
      </li>
      <li class="box-top">
        <img :src="img5" />
      </li>
      <li class="box-front">
        <img :src="img6" />
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "transform",
  data() {
    return {
      img1: require("@/assets/image/1.webp"),
      img2: require("@/assets/image/2.webp"),
      img3: require("@/assets/image/3.webp"),
      img4: require("@/assets/image/4.webp"),
      img5: require("@/assets/image/5.webp"),
      img6: require("@/assets/image/6.webp"),
    };
  },
  props: {},
  methods: {},
  computed: {},
  mounted() {
    window.onload = function () {
      let Box = document.querySelector(".box");
      let y = -60;
      let x = 45;
      Box.onmousedown = function (ev) {
        let oEvent = ev || event;
        let disX = oEvent.clientX - y;
        let disY = oEvent.clientY - x;
        document.onmousemove = function (ev) {
          let oEvent = ev || event;
          x = oEvent.clientY - disY;
          y = oEvent.clientX - disX;
          Box.style.transform =
            "perspective(800px) rotateX(" + x + "deg) rotateY(" + y + "deg)";
        };
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
        };
        return false;
      };
    };
  },
};
</script>

<style  scoped>
.container {
  width: 100%;
  height: 100%;
  margin: 0 auto;
  padding: 50px;
  text-align: center;
  background-color: rgb(218, 218, 218);
}
.box {
  width: 300px;
  height: 300px;
  position: relative;
  margin: 300px auto;
  transform-style: preserve-3d;
  animation: change 30s linear infinite;
}
li {
  width: 100%;
  height: 100%;
  background-color: white;
  opacity: 0.9;
  list-style: none;
  border-radius: 25px;
  position: absolute;
  transition: all 1s;
  border: 1px solid black;
  font-size: 40px;
  justify-content: center;
  align-items: center;
  box-shadow: 0 0 20px rgb(255, 81, 0);
}
ul img {
  width: 100%;
  height: 100%;
  border-radius: 25px;
}
.box-back {
  transform: translateZ(-150px);
}
.box-right {
  transform: translate(150px) rotateY(90deg);
}
.box-left {
  transform: translate(-150px) rotateY(-90deg);
}
.box-bottom {
  transform: translateY(150px) rotateX(-90deg);
  /* transform-origin: bottom; */
}
.box-top {
  transform: translateY(-150px) rotateX(90deg);
}
.box-front {
  transform: translateZ(150px);
}

/* .box:hover .box-back {
  transform: translateZ(-220px);
}
.box:hover .box-right {
  transform: translate(220px) rotateY(90deg);
}
.box:hover .box-left {
  transform: translate(-220px) rotateY(-90deg);
}
.box:hover .box-bottom {
  transform: translateY(220px) rotateX(-90deg);
}
.box:hover .box-top {
  transform: translateY(-220px) rotateX(90deg);
}
.box:hover .box-front {
  transform: translateZ(220px);
}

@keyframes change {
  from {
    transform: rotateY(360deg) rotateX(720deg) rotateZ(-720deg);
  }
  to {
    transform: rotateY(-360deg) rotateX(-720deg) rotateZ(720deg);
  }
} */
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侧耳倾听...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值