使用css3 实现旋转的立方体

17 篇文章 0 订阅
10 篇文章 0 订阅

demo在此

height="432" scrolling="no" src="//codepen.io/gjc9620/embed/LGaVay/?height=432&theme-id=0&default-tab=result" allowfullscreen="true">See the Pen <a href="http://codepen.io/gjc9620/pen/LGaVay/">Cube</a> by gjc9620 (<a href="http://codepen.io/gjc9620">@gjc9620</a>) on <a href="http://codepen.io">CodePen</a>.&#10;

代码贴在这里

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>nesting</title>
</head>
<style>
    .center{
        position: absolute;
        left: 0px;
        bottom: 0px;
        right: 0px;
        top: 0px;
        margin: auto;
    }
    html,body{
        height: 100%;
        width: 100%;
        display: -webkit-box;      /* OLD - iOS 6-, Safari 3.1-6 */
        display: -moz-box;         /* OLD - Firefox 19- (buggy but mostly works) */
        display: -ms-flexbox;      /* TWEENER - IE 10 */
        display: -webkit-flex;     /* NEW - Chrome */
        display: flex;
        justify-content: center;
        align-items: center;
        -webkit-perspective: 1000px;
        perspective: 1000px;
        -webkit-transform-style: preserve-3d;
        transform-style: preserve-3d;
    }
    .wall{
        width: 180px;
        height: 180px;
    }
    #wrap{
        width: 200px;
        height:200px;
        -webkit-transform: rotateY(0deg) rotateZ(0deg)  translateZ(-90px);
        -webkit-transform-style: preserve-3d;
        transform: rotateY(0deg) rotateZ(0deg)  translateZ(-90px);
        transform-style: preserve-3d;
        /*-webkit-transition: transform 10s linear;*/
        transition: transform 3s linear;

    }
    #d1{
        background: red;
    }
    #d2{
        background: blue;
        -webkit-transform-origin: 0 50%;
        -webkit-transform: rotateY(-90deg);
        transform-origin: 0 50%;
        transform: rotateY(-90deg);

    }
    #d3{
        background: pink;
        -webkit-transform-origin: 100% 0;
        -webkit-transform: rotateY(90deg);
        transform-origin: 100% 0;
        transform: rotateY(90deg);


    }
    #d4{
        background: darkgreen;
        -webkit-transform-origin: 50% 0;
        -webkit-transform: rotateX(90deg);
        transform-origin: 50% 0;
        transform: rotateX(90deg);

    }
    #d5{
        background: gold;
        -webkit-transform-origin: 50% 100%;
        -webkit-transform: rotateX(-90deg);
        transform-origin: 50% 100%;
        transform: rotateX(-90deg);

    }
    #d6{
        background: firebrick;
        -webkit-transform-origin: 50% 50%;
        -webkit-transform: translateZ(180px);
        transform-origin: 50% 50%;
        transform: translateZ(180px);

    }

</style>
<body >
<div id="wrap" >
    <div id="d1" class="wall center"> </div>
    <div id="d2" class="wall center"> </div>
    <div id="d3" class="wall center"> </div>
    <div id="d4" class="wall center"> </div>
    <div id="d5" class="wall center"> </div>
    <div id="d6" class="wall center"></div>
</div>
</body>
</html>
<script>
    window.onload = function(){
        var warp = document.getElementById("wrap"), x=0, z=0;
        function go(){
            z+=400;
            x+=600;
            warp.style.webkitTransform = "-webkit-rotateY("+z+"deg) rotateZ("+x+"deg)  translateZ(-90px)";
            warp.style.transform = "rotateY("+z+"deg) rotateZ("+x+"deg)  translateZ(-90px)";
        setTimeout(go,3000)
        }
        go();
    }



</script>

思路基本是就是使用旋转先让d2-d5变成墙壁 旋转的时候不要忘记设置origin
d1是不用动的 d5要动一下z轴 随后一个立方体就完成了
旋转的话转的是wrap 就好了 要往z轴后移动50% 也就是90px 否则旋转的origin是warp的左上角
再说说js
因为要一直运动所以我已开始时这样写的:

去掉warp的transtion

<script>
    //去掉warp的transtion

    window.onload = function(){
        var warp = document.getElementById("wrap"), x=0, z=0;
        function go(){
            z+=2;
            x+=3;
            warp.style.webkitTransform = "-webkit-rotateY("+z+"deg) rotateZ("+x+"deg)  translateZ(-90px)";
            warp.style.transform = "rotateY("+z+"deg) rotateZ("+x+"deg)  translateZ(-90px)";
        setTimeout(go,20)
        }
        go();
    }



</script>

后来才加上的transtion transtion是3s 所以setInterval是3s

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值