旋转的立方体

0. 前言

最是一年春好处,恰是回家过年时,昨天,经过“热情”的春运,回到到了家,最近,感觉动画比较带感,今天就做个比较炫酷的东西,旋转的立方体。

1. 简介

CSS3动画,做出来的效果比较吊,可能在你写代码中很少应用,但做出来的效果很厉害的

2. 标签属性

标签 描述
transform 元素可以2D或3D转换
transform-style 规定元素如何在 3D 空间中显示。
animation 可以给元素设置动画
@keyframes 动画名 {from {}to {}} 设置动画从开始到结束的
translateX(x) 定义 3D 转化,仅使用用于 X 轴的值。
translateY(y) 定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z) 定义 3D 转化,仅使用用于 Z 轴的值。
translate3d(x,y,z) 定义 3D 转化。
scaleX(x) 定义 3D 缩放转换,通过给定一个 X 轴的值。
scaleY(y) 定义 3D 缩放转换,通过给定一个 Y 轴的值。
scaleZ(z) 定义 3D 缩放转换,通过给定一个 Z 轴的值。
rotateX(angle) 定义沿 X 轴的 3D 旋转。
rotateY(angle) 定义沿 Y 轴的 3D 旋转。
rotateZ(angle) 定义沿 Z 轴的 3D 旋转。
rotate3d(x,y,z,angle) 定义 3D 旋转。

3. 实现旋转立方体的思路

  1. 先把正方体的六个面放在一起
  2. 然后旋转各个面,让它形成一个立方体。
  3. 然后让它旋转
  4. 我点击开始,开始旋转,点击停止,停止旋转。

4. 代码实现

4.1 静态页面
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #box{
                width: 300px;
                height: 300px;
                background-color: pink;
                position: relative;
                margin: 100px auto;
                animation: run 10s linear alternate paused infinite;
                
                transform-style: preserve-3d;
                
            }
            
            @keyframes  run{
                from{
                    transform: rotateX(0) rotateY(0);
                }
                to{
                    transform: rotateX(300deg) rotateY(200deg);
                }
            }
            #box div{
                width: 300px;
                height: 300px;
                position: absolute;
                background-color: orange;
                text-align: center;
                line-height: 300px;
                font-size: 50px;
                opacity: 0.5;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div class="div1">1</div>
            <div class="div2">2</div>
            <div class="div3">3</div>
            <div class="div4">4</div>
            <div class="div5">5</div>
            <div class="div6">6</div>
        </div>
        <center>
            <input type="button" name="" id="btn" value="开始" />
        </center>
    </body>
</html>
静态页面.png

我在这里设置一个透明度,可以看出其他的几个面都在它的后面。然后接下来我们旋转它们,让它形成一个立方体的形状。

4.2 旋转形成立方体

怎么旋转?在这里我把它分成三部分
第一部分

translateZ
平移两个面形成正方体前后两个面
第二部分
rotateX(90deg)
反转两个面形成正方体左右两个面

1.jpg

第三部分
rotateY(90deg)
反转两个面形成正方体上下两个面
2.jpg

            /*前面*/
            #box .div1{
                background-color: red;
                transform: translateZ(150px);
            }
            /*后面*/
            #box .div2{
                background-color: deepskyblue;
                transform: translateZ(-150px);
            }
            /*上面*/
            #box .div3{
                background-color: green;
                transform: rotateX(90deg) translateZ(150px);
            }
            /*下面*/
            #box .div4{
                background-color: plum;
                transform: rotateX(90deg) translateZ(-150px);
            }
            /*左面*/
            #box .div5{
                background-color: saddlebrown;
                transform: rotateY(90deg) translateZ(150px);
            }
            /*右面*/
            #box .div6{
                background-color: cyan;
                transform: rotateY(90deg) translateZ(-150px);
            }
旋转好的立方体.png

其实这已经旋转好了,从前面显示的数字可以看出,你可以想象一下,只有旋转起来你才能看出来这是一个立方体,那就看下去吧。

4.3 让它旋转

你让它旋转六个面是不容易的,你可以看我写的结构,在六个面外添加一个大的div,我们旋转div,就能实现立方体旋转了.......

<script type="text/javascript">
    box.style.animationPlayState = "running";
</script>
旋转的立方体.gif
4.4 点击按钮
btn.onclick = function () {
                if(this.value == "开始"){
                    this.value ="暂停"
                    box.style.animationPlayState = "running";
                }else{
                    this.value ="开始"
                    box.style.animationPlayState = "paused";
                }
            }
点击按钮.gif

5. 完整代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #box{
                width: 300px;
                height: 300px;
                background-color: pink;
                position: relative;
                margin: 100px auto;
                animation: run 10s linear alternate paused infinite;
                
                transform-style: preserve-3d;
                
            }
            
            @keyframes  run{
                from{
                    transform: rotateX(0) rotateY(0);
                }
                to{
                    transform: rotateX(300deg) rotateY(200deg);
                }
            }
            #box div{
                width: 300px;
                height: 300px;
                position: absolute;
                background-color: orange;
                text-align: center;
                line-height: 300px;
                font-size: 50px;
                opacity: 0.5;
            }
            #box{
                background: transparent;
            }
            /*前面*/
            #box .div1{
                background-color: red;
                transform: translateZ(150px);
            }
            /*后面*/
            #box .div2{
                background-color: deepskyblue;
                transform: translateZ(-150px);
            }
            /*上面*/
            #box .div3{
                background-color: green;
                transform: rotateX(90deg) translateZ(150px);
            }
            /*下面*/
            #box .div4{
                background-color: plum;
                transform: rotateX(90deg) translateZ(-150px);
            }
            /*左面*/
            #box .div5{
                background-color: saddlebrown;
                transform: rotateY(90deg) translateZ(150px);
            }
            /*右面*/
            #box .div6{
                background-color: cyan;
                transform: rotateY(90deg) translateZ(-150px);
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div class="div1">1</div>
            <div class="div2">2</div>
            <div class="div3">3</div>
            <div class="div4">4</div>
            <div class="div5">5</div>
            <div class="div6">6</div>
        </div>
        <center>
            <input type="button" name="" id="btn" value="开始" />
        </center>
        <script type="text/javascript">
            btn.onclick = function () {
                if(this.value == "开始"){
                    this.value ="暂停"
                    box.style.animationPlayState = "running";
                }else{
                    this.value ="开始"
                    box.style.animationPlayState = "paused";
                }
            }
        </script>
    </body>
</html>

6. 结束语

过年的脚步越来越近了,提前祝大家新年快乐,好了,这个很炫酷的立方体已经做完了,如果你觉得还可以,就给我点赞,分享一下吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容