一个简单的3D旋转木马相册

3d旋转木马相册算是H5和C3的一个简单的综合案例,主要是使用3d转换实现的。

3d中最重要的核心点:就是透视、3d呈现 —— perspective 和 transform-style:preserve-3d。

案例的主要核心技术点:3d转换+动画

 

案例制作分析

这个旋转木马的相册其实就是一个多面立方图,简单点的话可以把它看成一个正方体来分析。相册中不同的照片都放在一个容器中,所以我们需要使用定位来让照片叠在一起,然后用3d转换中的Z轴来控制位置。正方体的中心点在最中间,为了使旋转点在中心点,我们需要把每个面都使用translateZ移出同样的距离,当然使用了3d转换就需要保留元素的3d呈现效果,所以要记得给要保留3d效果元素的父元素添加transform-style属性。要想有近大远小的立体感,要给父级元素添加透视

还有一点需要注意:在写转换组合时,移动需要写在最前面,是指XY轴的移动,如果是移动Z轴则不需要。这里就是先把每一面的照片旋转好位置,再去调整Z轴的距离。

先看一下,做出来的效果。

这是整个静态的效果,要想让它旋转起来,需要添加动画效果的。

 

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>旋转木马版相册</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            /* 最后旋转的是section 也需要近大远小的效果 div也需要 所以透视放在body上 */
            perspective: 1000px;
        }

        section {
            position: relative;
            width: 300px;
            height: 200px;
            margin: 150px auto;
            /* 让子元素div保持3d效果 */
            transform-style: preserve-3d;
            animation: rotate 15s linear infinite;
            background: url(images/5.jpg) no-repeat;
        }

        section:hover {
            /* 当鼠标经过section时  动画停止 */
            animation-play-state: paused;
        }

        @keyframes rotate {
            0% {
                transform: rotateY(0)
            }

            100% {
                transform: rotateY(360deg);
            }

        }

        section div {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
            /* background: url(images/3.jpg) no-repeat; */
        }

        section div:nth-child(1) {
            /* 第一张图片 */
            background: url(images/1.jpg) no-repeat;
            transform: rotateY(0deg) translateZ(400px);
        }

        section div:nth-child(2) {
            background: url(images/2.jpg) no-repeat;
            /* 先旋转好位置  再移动 这里是移动Z轴 不是xy轴  所以不用严格要求把位移放在最前面 */
            transform: rotateY(60deg) translateZ(400px);
        }

        section div:nth-child(3) {
            background: url(images/3.jpg) no-repeat;
            transform: rotateY(120deg) translateZ(400px);
        }

        section div:nth-child(4) {
            background: url(images/4.jpg) no-repeat;
            transform: rotateY(180deg) translateZ(400px);
        }

        section div:nth-child(5) {
            background: url(images/5.jpg) no-repeat;
            transform: rotateY(240deg) translateZ(400px);
        }

        section div:nth-child(6) {
            background: url(images/dog.jpg) no-repeat;
            transform: rotateY(300deg) translateZ(400px);
        }
    </style>
</head>

<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>

</html>

最后附上一个我做案例的图片

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值