当前位置:   article > 正文

前端入门篇(五十六)练习8:3d动画(照片旋转展示)_vue 图片 3d闪烁旋转效果

vue 图片 3d闪烁旋转效果

效果:
在这里插入图片描述

先来看xyz坐标轴的位置
默认状态下,坐标原点在元素中心点,即:
transform-origin: 50% 50% 0;默认值
画图是这样的:z轴垂直屏幕向外,xyz轴的方向是符合左手螺旋定律的(中学物理电磁场那块内容),大拇指指向是z轴正方向,其余四指自然握紧,从x轴正方向转向z轴正方向
大概这样:弯弯的那个指向是判断xyz是否符合左手螺旋定则时手旋转的方向
在这里插入图片描述

所以当我们把盒子沿着y轴旋转一点角度,坐标轴变成了这样:
x轴变成朝里面旋,z轴从垂直屏幕向外朝右边旋
在这里插入图片描述
图片沿y轴是这样子转的:
在这里插入图片描述
大概这样子

这时候,如果要盒子往前走,应该是translateZ,
在这里插入图片描述
此处为了效果明显,又加了一个demo的图片,并设置position,left和top为0,让两张demo在一行,要不然div会独占一行,效果出不来

(因为transform-origin的关系,右边的图片转的角度会稍微偏一点点)

所以,我们要做到照片展示的那个效果,就是让6张图片这样沿Y轴旋转,形成一个"米"字少一竖的样子,各自再往前走200px,变成像六边形一样
如果两张图片旋转的角度刚好相差180°,就会重合在一起,两张图片背靠背,沿着与本身垂直的方向移动
在这里插入图片描述
变成这样:
在这里插入图片描述
凑合记录一下思路

首先,先做出里面那个效果,每个图片间隔60deg

.wrapper {
    position: relative;
    height: 200px;
    width: 200px;
    margin: 200px auto;
    transform-style: preserve-3d;
    transform: rotateX(60deg);
}
.item {
    position: absolute;
    left: 0;
    top: 0;
    width: 200px;
    height: 200px;
    line-height: 200px;
    opacity: 0.5;
    text-align: center;
    color: #fff;
    font-size: 30px;
    
}
.item:nth-child(1) {
    background: royalblue;
    transform: rotateY(60deg);
}
.item:nth-child(2){
    background: salmon;
    transform: rotateY(120deg);
}
.item:nth-child(3) {
    background: slateblue;
    transform: rotateY(180deg);
}
.item:nth-child(4) {
    background: springgreen;
    transform: rotateY(240deg);
}
.item:nth-child(5) {
    background: pink;
    transform: rotateY(300deg);
}
.item:nth-child(6) {
    background: purple;
    transform: rotateY(360deg);
}
  • 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

效果:
在这里插入图片描述

然后每个图片朝各自前面移动200px
即每个nth-child下的transform加一个translateZ(200px);
如:

.item:nth-child(1) {
    background: royalblue;
    transform: rotateY(60deg) translateZ(200px);
}
  • 1
  • 2
  • 3
  • 4

看效果:
在这里插入图片描述
最后设置旋转动画,并调整父容器的translateX(父容器抬头的角度)

父级容器wrapper修改translateX,并调用动画:

transform: rotateX(30deg);
animation: move 10s linear infinite;
  • 1
  • 2

动画帧:

@keyframes move {
    0% {
        transform: rotateX(-20deg) rotateY(360deg);
    }
    100% {
        transform: rotateX(-20deg) rotateY(0);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果:下面那一排是在前面,1-2-3-4-5-6这样的顺序转:
在这里插入图片描述
上面这个旋转是先沿X轴转,再沿y轴转:
在这里插入图片描述

如果把rotateY放在rotateX前面,就会先转y,再转x,效果就不一样了:
在这里插入图片描述
随着盒子沿y轴旋转,x轴和z轴的方向不停在变,所以呈现出来的效果就是方向不定一直变
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/134880
推荐阅读
相关标签
  

闽ICP备14008679号