前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生JS实现魔方效果

原生JS实现魔方效果

作者头像
越陌度阡
发布2020-11-26 10:43:15
7.3K0
发布2020-11-26 10:43:15
举报

给大家分享一个用原生JS实现的魔方效果,效果如下:

以下是代码实现:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title>原生JS实现魔方效果</title>
    <meta charset="utf-8">
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        body {
            width: 100%;
            height: 100%;
            background: radial-gradient(#fff, red);
        }

        .container {
            width: 300px;
            height: 300px;
            margin: 200px auto;
            perspective: 20000px;
        }

        .box {
            width: 300px;
            height: 300px;
            border: 1px solid transparent;
            box-sizing: border-box;
            position: relative;
            transform-style: preserve-3d;
            animation: rotate 10s linear infinite;
        }

        @keyframes rotate {
            100% {
                transform: rotatex(360deg) rotatey(360deg) rotatez(360deg);
            }
        }

        .box-page {
            width: 300px;
            height: 300px;
            position: absolute;
            box-sizing: border-box;
            transform-style: preserve-3d;
        }


        .top {
            transform: translateZ(150px);
        }

        .bottom {
            transform: translateZ(-150px) rotateX(180deg);
        }

        .right {
            transform: translateX(150px) rotateY(90deg);
        }

        .left {
            transform: translateX(-150px) rotateY(-90deg);
        }

        .after {
            transform: translateY(-150px) rotateX(90deg);
        }

        .before {
            transform: translateY(150px) rotateX(-90deg);
        }


        .box-page div:first-child,
        .box-page div:nth-child(3),
        .box-page div:nth-child(5),
        .box-page div:nth-child(7),
        .box-page div:nth-child(9) {
            transform: rotateY(0deg);
            animation: rotatey 6s linear infinite;
        }


        @keyframes rotatey {
            20% {
                transform: rotateY(0deg);
                background-size: 300px 300px;
            }

            40% {

                transform: rotateY(540deg);
                background-size: 100px 100px;
            }

            60% {
                transform: rotateY(540deg);
                background-size: 100px 100px;
            }

            80% {
                transform: rotateY(0deg);
                background-size: 300px 300px;
            }
        }

        .box-page div:nth-child(2),
        .box-page div:nth-child(4),
        .box-page div:nth-child(6),
        .box-page div:nth-child(8) {
            transform: rotateX(0deg);
            animation: rotatex 6s linear infinite;
        }

        @keyframes rotatex {
            20% {
                transform: rotateX(0deg);
                background-size: 300px 300px;
            }

            40% {

                transform: rotateX(540deg);
                background-size: 100px 100px;
            }

            60% {
                transform: rotateX(540deg);
                background-size: 100px 100px;
            }

            80% {
                transform: rotateX(0deg);
                background-size: 300px 300px;
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="box">
            <div class="top box-page"></div>
            <div class="bottom box-page"></div>
            <div class="left box-page"></div>
            <div class="right box-page"></div>
            <div class="before box-page"></div>
            <div class="after box-page"></div>
        </div>
    </div>
    <script type="text/javascript">
        // 文件夹images下存放6张图片,分别为0.jpg、1.jpg、2.jpg、3.jpg、4.jpg、5.jpg
        var arr = document.querySelectorAll(".box>div");
        for (var n = 0; n < arr.length; n++) {
            for (var i = 0; i < 3; i++) {
                for (var j = 0; j < 3; j++) {
                    var divs = document.createElement("div");
                    divs.style.cssText = `
                        width:100px;
                        height:100px;
                        border: 1px solid #fff;
                        position:absolute;
                        box-sizing:border-box;
                        background-image:url(images/`+ n + `.jpg);
                        background-size: 300px 300px;
                    `;
                    arr[n].appendChild(divs);

                    // 改变每一个div的位置
                    divs.style.left = 100 * j + "px";
                    divs.style.top = 100 * i + "px";

                    // 改变背景图相应的位置
                    divs.style.backgroundPositionX = -j * 100 + "px";
                    divs.style.backgroundPositionY = -i * 100 + "px";
                }
            }
        }

    </script>
</body>

</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档