其他分享
首页 > 其他分享> > html中3D旋转木马动画的制作

html中3D旋转木马动画的制作

作者:互联网

踩了不少坑,这里都写出来就当给大家抛砖引玉了。

section {
            position: relative;
            top: 0;
            left: 0;
            width: 300px;
            height: 300px;
            transform-style: preserve-3d;
            animation: rotate 5s linear infinite;
            background: url("image/dogy1.jpg");
        }

        section div {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: url("image/dogy.jpg") no-repeat;
        }

        section div:nth-child(1) {
            transform: rotateY(0) translateZ(400px);
        }

        section div:nth-child(2) {
            transform: rotateY(60deg) translateZ(400px);
        }

        section div:nth-child(3) {
            transform: rotateY(120deg) translateZ(400px);
        }

        section div:nth-child(4) {
            transform: rotateY(180deg) translateZ(400px);
        }

        section div:nth-child(5) {
            transform: rotateY(240deg) translateZ(400px);
        }

        section div:nth-child(6) {
            transform: rotateY(300deg) translateZ(400px);
        }

        @keyframes rotate {
            0% {
                transform: rotateY(0);
            }
            100% {
                transform: rotateY(-360deg);
            }
        }

本身算是比较简单的,成品效果如下:

 

需要注意的有:

1、对于这样的旋转图,可以先进行【旋转】再进行【位移】,因为元素的参考坐标轴永远是他自己的中心处——如果不做修改的话。因此将其旋转后,再做位移就能完美得移动到想要的位置了。

譬如这里,外圈是有6张图片。一开始我想着是正六边形,那么第一张正对的图片就要往z轴移动 √3倍 边长了……

其余的图片虽然有对称能够根据这个推算出来移动距离,但也很难让他们看上去是一个【整体】,因此最好先旋转后位移。

 

2、最好嵌套一个父盒子

<div>子元素早已定好了位置,我们这里是对<section>元素进行旋转动画所以看上去是都在动——相对静止。

如果此时想要对 <section> 盒子本身作定位,抑或是在正常文档流之下布置其他元素,让页面变高,都会使得这个旋转动画变得十分鬼畜……(或许因为是沿着y轴旋转,所以和高度相关吧,如果是x轴水车式的动画的话,可能就和宽度有关了吧)

譬如预先设置了页面高度(或者说动画下方有其他元素撑高)

 

body {
            height: 2000px;
            perspective: 1000px;
        }

这里就是页面高度太高,以至于旋转变得很奇怪。如果你还把透视(perspective)设置得过低,那么整个动画将几乎覆盖整个页面……

 

同时,设置父盒子也便于使整个动画定位。如果你是给动画盒子<section>本身设置定位的话,定位将会失效。

总之设置一个父盒子就完事儿了。

.elevator {
            position: fixed;
            top: 100px;
            left: 100px;
            perspective: 300px;
        }

 

如果不需要看到旋转到后方图片得背面,那么可以给盒子设置 

section div {
            ……
            backface-visibility: hidden;
        }

这个属性会使得盒子背面面向屏幕时,隐藏自身。因为大部分时候图片也好文字也好,旋转过去后的背面实际上是镜面反转了,所以可以考虑隐藏。

 

 

翻转图片也是需要设置这个属性,才能让前面的这个翻转过去后消失,留下“之前的背面元素”

 

标签:动画,section,transform,旋转,rotateY,html,木马,div,3D
来源: https://www.cnblogs.com/ricardox3/p/16060926.html