CSS3 炫酷的时钟制作

  时钟制作效果:

1.png

       首先你要知道时钟的运行规律(虽然大部分人都知道),然后给三个针制作符合自身运动规律的动

画,这里需要用到定时器,但是如果只需要像定时器一样可刷新,用infinit也行。其次是针的摆放需要应用到

transform-origin这一属性

transform-origin: x-axis y-axis z-axis;
描述
x-axis

定义视图被置于 X 轴的何处。可能的值:

  • left

  • center

  • right

  • length

  • %

y-axis

定义视图被置于 Y 轴的何处。可能的值:

  • top

  • center

  • bottom

  • length

  • %

z-axis

定义视图被置于 Z 轴的何处。可能的值:

  • length

上面是w3school中transform-origin的详解


布局部分:

<body>
    <div class="clock-wrap">
        <div class="clock">
            <ul id="list">
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
        <div class="num" id="num">
            <ul>
                <li>12</li>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
                <li>8</li>
                <li>9</li>
                <li>10</li>
                <li>11</li>
            </ul>
        </div>
        <div class="hour" id="hour" style="transform: rotate(12deg);"></div>
        <div class="min" id="min" style="transform: rotate(18deg);"></div>
        <div class="sec" id="sec" style="transform: rotate(150deg);"></div>
        <div class="circle"></div>
    </div>

样式部分:

<style>
        .hour,.min,.sec{
            background: #fff;
            position: absolute;
            left: 50%;
            top: 50%;
            transform-origin: bottom;
            box-shadow: 0 0 6px rgb(0 0 0 /50%);
        }
        body{
            font: 1px "微软雅黑";
            color: #666;
            background-color: #333;
            display: block;
        }
        body, ul{
            margin: 0;
            padding: 0;
        }
        *{
            margin: 0;
            padding:0;
        }
        .clock-wrap{
            width: 400px;
            height: 400px;
            border: 10px solid #fff;
            border-radius: 50%;
            margin: 80px auto 0;
            position: relative;
            box-shadow:0 0 40px rgba(0, 0, 0) ;
        }
        .clock ul{
            width: 400px;
            height: 400px;
            position: relative;
            border-radius: 50%;
            background: radial-gradient(circle at center,rgb(14, 14, 51),#000000);
            box-shadow: 0  0  50px  rgba(0, 0, 0 /50%) inset;
        }
        .clock li:nth-child(5n+1){
            height: 18px;
        }
        .clock ul li{
            position: absolute;
            left: 50%;
            margin-left: -2px;
            top: 0;
            width: 4px;
            height: 10px;
            background: rgba(255, 255, 255,50%);
            transform-origin: center 200px;
        }
        li{
            list-style: none;
        }
        li{
            display: list-item;
            text-align:-webkit-match-parent;
        }
        ul{
            list-style-type: disc;
        }
        .num{
            position: absolute;
            width: 360px;
            height: 360px;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
            margin: auto;
        }
        .num li{
            position: absolute;
            left: 50%;
            margin-left: -10px;
            top: 0;
            color: rgba(255, 255, 255, 50%);
            font: 2em Arial, Helvetica, sans-serif;
            transform-origin: center 180px;
        }
        .hour{
            width: 14px;
            height: 100px;
            margin-left: -7px;
            margin-top: -100px;
            border-radius: 3px;
        }
        .min{
            width: 10px;
            height: 150px;
            margin-left: -5px;
            margin-top: -150px;
            border-radius: 2px;
        }
        .sec{
            width: 4px;
            height: 180px;
            margin-left: -2px;
            margin-top: -180px;
            border-radius: 1px;
        }
        .circle{
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: #fff;
            position: absolute;
            left: 50%;
            margin-left: -20px;
            top: 50%;
            margin-top: -20px;
            box-shadow: 0 0 20px  rgba(0, 0, 0 /40%);
        }
        .clock li:nth-child(1){transform: rotate(0deg);}
        .clock li:nth-child(2){transform: rotate(6deg);}
        .clock li:nth-child(3){transform: rotate(12deg);}
        .clock li:nth-child(4){transform: rotate(18deg);}
        .clock li:nth-child(5){transform: rotate(24deg);}
        .clock li:nth-child(6){transform: rotate(30deg);}
        .clock li:nth-child(7){transform: rotate(36deg);}
        .clock li:nth-child(8){transform: rotate(42deg);}
        .clock li:nth-child(9){transform: rotate(48deg);}
        .clock li:nth-child(10){transform: rotate(54deg);}
        .clock li:nth-child(11){transform: rotate(60deg);}
        .clock li:nth-child(12){transform: rotate(66deg);}
        .clock li:nth-child(13){transform: rotate(72deg);}
        .clock li:nth-child(14){transform: rotate(78deg);}
        .clock li:nth-child(15){transform: rotate(84deg);}
        .clock li:nth-child(16){transform: rotate(90deg);}
        .clock li:nth-child(17){transform: rotate(96deg);}
        .clock li:nth-child(18){transform: rotate(102deg);}
        .clock li:nth-child(19){transform: rotate(108deg);}
        .clock li:nth-child(20){transform: rotate(114deg);}
        .clock li:nth-child(21){transform: rotate(120deg);}
        .clock li:nth-child(22){transform: rotate(126deg);}
        .clock li:nth-child(23){transform: rotate(132deg);}
        .clock li:nth-child(24){transform: rotate(138deg);}
        .clock li:nth-child(25){transform: rotate(144deg);}
        .clock li:nth-child(26){transform: rotate(150deg);}
        .clock li:nth-child(27){transform: rotate(156deg);}
        .clock li:nth-child(28){transform: rotate(162deg);}
        .clock li:nth-child(29){transform: rotate(168deg);}
        .clock li:nth-child(30){transform: rotate(174deg);}
        .clock li:nth-child(31){transform: rotate(180deg);}
        .clock li:nth-child(32){transform: rotate(186deg);}
        .clock li:nth-child(33){transform: rotate(192deg);}
        .clock li:nth-child(34){transform: rotate(198deg);}
        .clock li:nth-child(35){transform: rotate(204deg);}
        .clock li:nth-child(36){transform: rotate(210deg);}
        .clock li:nth-child(37){transform: rotate(216deg);}
        .clock li:nth-child(38){transform: rotate(222deg);}
        .clock li:nth-child(39){transform: rotate(228deg);}
        .clock li:nth-child(40){transform: rotate(234deg);}
        .clock li:nth-child(41){transform: rotate(240deg);}
        .clock li:nth-child(42){transform: rotate(246deg);}
        .clock li:nth-child(43){transform: rotate(252deg);}
        .clock li:nth-child(44){transform: rotate(258deg);}
        .clock li:nth-child(45){transform: rotate(264deg);}
        .clock li:nth-child(46){transform: rotate(270deg);}
        .clock li:nth-child(47){transform: rotate(276deg);}
        .clock li:nth-child(48){transform: rotate(282deg);}
        .clock li:nth-child(49){transform: rotate(288deg);}
        .clock li:nth-child(50){transform: rotate(294deg);}
        .clock li:nth-child(51){transform: rotate(300deg);}
        .clock li:nth-child(52){transform: rotate(306deg);}
        .clock li:nth-child(53){transform: rotate(312deg);}
        .clock li:nth-child(54){transform: rotate(318deg);}
        .clock li:nth-child(55){transform: rotate(324deg);}
        .clock li:nth-child(56){transform: rotate(330deg);}
        .clock li:nth-child(57){transform: rotate(336deg);}
        .clock li:nth-child(58){transform: rotate(342deg);}
        .clock li:nth-child(59){transform: rotate(348deg);}
        .clock li:nth-child(60){transform: rotate(354deg);}
        .num li:nth-child(1){transform: rotate(0deg);}
        .num li:nth-child(2){transform: rotate(30deg);}
        .num li:nth-child(3){transform: rotate(60deg);}
        .num li:nth-child(4){transform: rotate(90deg);}
        .num li:nth-child(5){transform: rotate(120deg);}
        .num li:nth-child(6){transform: rotate(150deg);}
        .num li:nth-child(7){transform: rotate(180deg);}
        .num li:nth-child(8){transform: rotate(210deg);}
        .num li:nth-child(9){transform: rotate(240deg);}
        .num li:nth-child(10){transform: rotate(270deg);}
        .num li:nth-child(11){transform: rotate(300deg);}
        .num li:nth-child(12){transform: rotate(330deg);}
    </style>

脚本部分:

<script>
      window.onload=function(){
    var oList=document.getElementById("list");
    var oCSS=document.getElementById("css"); //style标签也可以加id属性。
    var aNums=document.getElementById("num").getElementsByTagName("li");
    var oHour=document.getElementById("hour");
    var oMin=document.getElementById("min");
    var oSec=document.getElementById("sec");
    var aLi="";
    var sCSS="";
    for(var i=0;i<60;i++){ //循环60次,产生刻度值和每一个刻度旋转的度数。
        aLi+="<li></li>";
        sCSS+="#clock li:nth-child("+(i+1)+"){transform:rotate("+i*6+"deg);}"
        }
    for(var i=0;i<12;i++){
        sCSS+="#num li:nth-child("+(i+1)+"){transform:rotate("+i*30+"deg);}"
        }
    oList.innerHTML=aLi;
    oCSS.innerHTML+=sCSS;  //css需要追加到原来的css文档中。
    myTime();  //初始化函数。
    setInterval(myTime,1000);    //设置定时器,每隔1秒执行一次函数。
    function myTime(){
        var oDate=new Date();
        var iSec=oDate.getSeconds();
        //精确到秒数的分钟数。
        var iMin=oDate.getMinutes()+iSec/60;
        //精确到分秒的小时数。可以在旋转的时候更精确。
        var iHour=oDate.getHours()+iMin/60;
       
        oSec.style.transform="rotate("+iSec*6+"deg)" ;
        oMin.style.transform="rotate("+iMin*6+"deg)";
        oHour.style.transform="rotate("+iHour*30+"deg)"; //时针的指向需要把分钟和秒数算进去才精确。
        }
    }
    </script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值