zoukankan      html  css  js  c++  java
  • 玩骰子麽

    本demo应用了css3 transition animate,若有兼容性问题,请升级你的浏览器!

    这次先让大家玩玩!

    结构层

    ul骰子容器包裹6个面li;每个面里面包裹一个点数容器div.c-num用于position;最后就是调点数p的样式了。
    <ul class="container">
            <li class="lf">
                <div class="c-num">
                    <p class="num1"></p>
                </div>
            </li>
            <li class="rt">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                </div>
            </li>
            <li class="top">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                    <p class="num5"></p>
                </div>
            </li>
            <li class="btm">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                    <p class="num5"></p>
                    <p class="num6"></p>
                </div>
            </li>
            <li class="in">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                </div>
            </li>
            <li class="out">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                </div>
            </li>
        </ul>

    表现层

    ul,li,div,p{margin:0;padding:0;}
    .container{
                position:relative;
                list-style:none;
    }
    先将容器ul相对定位,在将li绝对定位,则每个面li都在左上角便于rotate
    transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);
    过渡xy方向以及旋转 参考W3C http://www.w3school.com.cn/cssref/pr_transform.asp
    transform-style:preserve-3d;
    嵌套元素以3d展示 http://www.w3school.com.cn/cssref/pr_transform-style.asp
    transform-origin:50px 50px;
    旋转中心位置http://www.w3school.com.cn/cssref/pr_transform-origin.asp
    animation:nickAnimate 5s ease infinite;
    动画调用http://www.w3school.com.cn/cssref/pr_animation.asp
    animation-fill-mode:forwards;
    规定动画完成后停留在最后一帧http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp
    animation-play-state:paused;
    默认为paused,不然页面刷新会自动执行动画的http://www.w3school.com.cn/cssref/pr_animation-play-state.asp
    @keyframes nickAnimate{/*动画定义*/
                0%{
                    transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);
                }
                100%{
                    transform:translate(130px,120px) rotateX(1360deg) rotateY(1360deg);
                }
            }

    动画的属性值可以随便调。

    .container>li{
                position:absolute;
                100px;height:100px;
                border-radius:15px;
                background:#DDDBE6;
                overflow:hidden;
                border:1px solid #ddd;
            }

    骰子的每个面的公共样式

    将每个面rotate成一个立方体
    .lf{
                transform:rotateY(90deg) translateZ(-50px);
            }
            .rt{
                transform:translateX(100px) rotateY(90deg) translateZ(-50px);
            }
            .top{
                transform:translateY(-50px) rotateX(90deg);
            }
            .btm{
                transform:translateY(50px) rotateX(90deg);
            }
            .in{
                transform:translateZ(50px);
            }
            .out{
                transform:translateZ(-50px);
            }
    现在可以看到一个立方体了吧,下面就是一些定位样式渲染成骰子的样子

    点数容器的公共样式

    .c-num{/*点数容器*/
                position:relative;
                100%;
                height:100%;
                background:radial-gradient(#fff 35%,#DDDBE6);
            }
    点数公用样式 我把每个点都居中了,然后在translate,其实直接translate或者position也可以,仁者见仁智者见智吧
    p[class^='num']{
                position:absolute;
                20px;
                height:20px;
                background-color:red;
                border-radius:50%;
    
                top:50%;left:50%;
                margin-top:-5px;
                margin-left:-5px;
            }
    下面就是点数p的样式微调了
    /*点数1的面已经居中*/
            .lf .num1{}
            /*点数2的面translate慢慢调吧*/
            .in .num1{
                transform:translate(-5px,-20px);
            }
            .in .num2{
                transform:translate(-5px,20px);
            }
            /*点数3的面*/
            .rt .num1{
                transform:translate(-5px,-30px);
            }
            .rt .num2{
                transform:translateX(-5px);
            }
            .rt .num3{
                transform:translate(-5px,30px);
            }
            /*点数4的面*/
            .out .num1{
                transform:translate(-20px,20px);
            }
            .out .num2{
                transform:translate(-20px,-20px);
            }
            .out .num3{
                transform:translate(20px,20px);
            }
            .out .num4{
                transform:translate(20px,-20px);
            }
            /*点数5的面*/
            .top .num1{
                transform:translate(25px,-30px);
            }
            .top .num2{
                transform:translate(-25px,-30px);
            }
            .top .num4{
                transform:translate(-25px,25px);
            }
            .top .num5{
                transform:translate(25px,25px);
            }
            /*点数6的面*/
            .btm .num1{
                transform:translate(-25px,30px);
            }
            .btm .num2{
                transform:translate(-25px,0px);
            }
            .btm .num3{
                transform:translate(-25px,-30px);
            }
            .btm .num4{
                transform:translate(15px,30px);
            }
            .btm .num5{
                transform:translate(15px,0px);
            }
            .btm .num6{
                transform:translate(15px,-30px);
            }

    行为层

    document.getElementsByClassName('run')[0].onclick=function(){
            document.getElementsByClassName('container')[0].style.animationPlayState='running';
        };
        document.getElementsByClassName('paused')[0].onclick=function(){
            document.getElementsByClassName('container')[0].style.animationPlayState='paused';
        };
    摇啊摇、暂停按钮就是控制animate的运行状态
    ok!上完整代码有兴趣的玩玩吧!
    <!doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport">
        <title>css3 骰子 animate nick</title>
        <style>
            /*先将容器ul相对定位,在将li绝对定位,则每个面li都在左上角便于rotate*/
            ul,li,div,p{margin:0;padding:0;}
            .container{
                position:relative;
                list-style:none;
                transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);/*过渡xy方向以及旋转http://www.w3school.com.cn/cssref/pr_transform.asp*/
                transform-style:preserve-3d;/*嵌套元素以3d展示 http://www.w3school.com.cn/cssref/pr_transform-style.asp*/
                transform-origin:50px 50px;/*旋转中心位置http://www.w3school.com.cn/cssref/pr_transform-origin.asp*/
    
                animation:nickAnimate 5s ease infinite;/*动画调用http://www.w3school.com.cn/cssref/pr_animation.asp*/
                animation-fill-mode:forwards;/*规定动画完成后停留在最后一帧http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp*/
                animation-play-state:paused;/*默认为paused,不然页面刷新会自动执行动画的http://www.w3school.com.cn/cssref/pr_animation-play-state.asp*/
            }
            @keyframes nickAnimate{/*动画定义*/
                0%{
                    transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);
                }
                100%{
                    transform:translate(130px,120px) rotateX(1360deg) rotateY(1360deg);
                }
            }
            .container>li{
                position:absolute;
                width:100px;height:100px;
                border-radius:15px;
                background:#DDDBE6;
                overflow:hidden;
                border:1px solid #ddd;
            }
            /*将每个面rotate成一个立方体*/
            .lf{
                transform:rotateY(90deg) translateZ(-50px);
            }
            .rt{
                transform:translateX(100px) rotateY(90deg) translateZ(-50px);
            }
            .top{
                transform:translateY(-50px) rotateX(90deg);
            }
            .btm{
                transform:translateY(50px) rotateX(90deg);
            }
            .in{
                transform:translateZ(50px);
            }
            .out{
                transform:translateZ(-50px);
            }
            /*现在可以看到一个立方体了吧,下面就是一些定位样式渲染成骰子的样子*/
            .c-num{/*点数容器*/
                position:relative;
                width:100%;
                height:100%;
                background:radial-gradient(#fff 35%,#DDDBE6);
            }
            p[class^='num']{/*点数公用样式 我把每个点都居中了,然后在translate,其实直接translate或者position也可以,仁者见仁智者见智吧*/
                position:absolute;
                width:20px;
                height:20px;
                background-color:red;
                border-radius:50%;
    
                top:50%;left:50%;
                margin-top:-5px;
                margin-left:-5px;
            }
            /*点数1的面已经居中*/
            .lf .num1{}
            /*点数2的面translate慢慢调吧*/
            .in .num1{
                transform:translate(-5px,-20px);
            }
            .in .num2{
                transform:translate(-5px,20px);
            }
            /*点数3的面*/
            .rt .num1{
                transform:translate(-5px,-30px);
            }
            .rt .num2{
                transform:translateX(-5px);
            }
            .rt .num3{
                transform:translate(-5px,30px);
            }
            /*点数4的面*/
            .out .num1{
                transform:translate(-20px,20px);
            }
            .out .num2{
                transform:translate(-20px,-20px);
            }
            .out .num3{
                transform:translate(20px,20px);
            }
            .out .num4{
                transform:translate(20px,-20px);
            }
            /*点数5的面*/
            .top .num1{
                transform:translate(25px,-30px);
            }
            .top .num2{
                transform:translate(-25px,-30px);
            }
            .top .num4{
                transform:translate(-25px,25px);
            }
            .top .num5{
                transform:translate(25px,25px);
            }
            /*点数6的面*/
            .btm .num1{
                transform:translate(-25px,30px);
            }
            .btm .num2{
                transform:translate(-25px,0px);
            }
            .btm .num3{
                transform:translate(-25px,-30px);
            }
            .btm .num4{
                transform:translate(15px,30px);
            }
            .btm .num5{
                transform:translate(15px,0px);
            }
            .btm .num6{
                transform:translate(15px,-30px);
            }
        </style>
    </head>
    <body>
       <!--功能-运行、暂停按钮-->
        <button class="run">摇啊摇</button>
        <button class="paused">暂停</button>
       <!--骰子的结构-->
       <!--骰子容器包裹6个面;每个面里面包裹一个点数容器用于position;最后就是调点数样式了-->
        <ul class="container">
            <li class="lf">
                <div class="c-num">
                    <p class="num1"></p>
                </div>
            </li>
            <li class="rt">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                </div>
            </li>
            <li class="top">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                    <p class="num5"></p>
                </div>
            </li>
            <li class="btm">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                    <p class="num5"></p>
                    <p class="num6"></p>
                </div>
            </li>
            <li class="in">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                </div>
            </li>
            <li class="out">
                <div class="c-num">
                    <p class="num1"></p>
                    <p class="num2"></p>
                    <p class="num3"></p>
                    <p class="num4"></p>
                </div>
            </li>
        </ul>
    <script>
    //    摇啊摇、暂停按钮就是控制animate的运行状态
        document.getElementsByClassName('run')[0].onclick=function(){
            document.getElementsByClassName('container')[0].style.animationPlayState='running';
        };
        document.getElementsByClassName('paused')[0].onclick=function(){
            document.getElementsByClassName('container')[0].style.animationPlayState='paused';
        };
    </script>
    </body>
    </html>
    View Code
       毕竟还年少,自我感觉至少如此,有些玩心,大家有什么新奇好的想法可以给我留言或在我的博客首页qq交流,愿我们在娱乐的过程中共同进步!
     
  • 相关阅读:
    点击区域外隐藏该区域,event.stopPropagation()
    PHP 笔记一(systax/variables/echo/print/Data Type)
    <hr> 的18种样式
    CSS 设置背景透明度,不影响子元素
    console.dir() 与 console.log() 区别
    JS 鼠标滚轮事件(mousewheel/DOMMouseScroll)
    HTML 字符图案
    CSS 样式优先级
    替换元素和不可替换元素,块级元素和行内元素
    CSS3 笔记五(Buttons)
  • 原文地址:https://www.cnblogs.com/puyongsong/p/6099092.html
Copyright © 2011-2022 走看看