使用原生JS编写时钟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用原生JS编写时钟相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>钟表</title>
    <style type="text/css">
        /*钟表圆圈的样式*/
        .circle {
            position: relative;
            margin: 150px auto;
            width: 200px;
            height: 200px;
            border: 2px solid black;
            border-radius: 100px;
        }
        /*时针*/
        #hour {
            position: absolute;
            top: 97px;
            left: 97px;
            width: 6px;
            height: 60px;
            background-color: blue;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*分针*/
        #min {
            position: absolute;
            top: 98px;
            left: 98px;
            width: 4px;
            height: 80px;
            background-color: forestgreen;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*秒针*/
        #sec {
            position: absolute;
            top: 99px;
            left: 99px;
            width: 2px;
            height: 90px;
            background-color: chocolate;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*钟表中心圆点*/
        #point {
            position: absolute;
            z-index: 1;
            top: 90px;
            left: 90px;
            width: 20px;
            height: 20px;
            background-color: black;
            border-radius: 10px;
        }
        /*钟表刻度*/
        ul li {
            list-style: none;
            position: absolute;
            top: 100px;
            left: 99px;
            width: 2px;
            height: 97px;
            border-bottom: 4px solid black;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*钟表小时刻度,就是长一点的那个刻度*/
        ul li.lang {
            height: 93px;
            border-bottom: 8px solid black;
        }
    </style>
</head>
<body>
    <div class="circle">
        <div id="point"></div>
        <div id="hour"></div>
        <div id="min"></div>
        <div id="sec"></div>
        <ul>

        </ul>
    </div>

</body>
<script type="text/javascript">

//    分别获取时针,分针,秒针和刻度的父元素ul
    var hour=document.getElementById("hour");
    var min=document.getElementById("min");
    var sec=document.getElementById("sec");
    var oul=document.getElementsByTagName("ul")[0];

//      动态创建60个li表示钟表刻度并添加到父元素ul内
    var olis="";
    for (var i=0;i<60;i++){
        olis+="<li></li>";
    }
    oul.innerHTML=olis;
//        获取创建好的每一个li
    var oLis=document.getElementsByTagName("li");
    for(var i=0;i<60;i++){
//        每隔五个就有一个小时刻度,让它获取lang这个样式
        if(i%5==0){
            oLis[i].className="lang";
        }
//        整圆360度,每一个刻度是6度,让第i个li旋转6i度
        oLis[i].style.transform="rotateZ("+i*6+"deg)";
    }


    var timer = null;

    function run(){

        //每次执行前关闭并清除之前的定时器,节约性能
        clearTimeout(timer);
        timer = null;

        var nowDate=new Date;
        //但是如果当前时间是12点半,时针不应该是直直的指向12点,应该是在12和1之间,
        //所以就需要把当前多出的分钟数/60换算成小时数加起来,下面在计算角度的时候也就可以对应上了。
        //分针同样如此
        var s=nowDate.getSeconds();
        sec.style.transform="rotateZ("+(s*6+180)+"deg)";
        sec.style.webkitTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.oTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.msTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.mozTransform="rotateZ("+(s*6+180)+"deg)";
        //得到每一秒的旋转角度(每一秒是走6度)
        var m=nowDate.getMinutes()+s/60;
        min.style.transform="rotateZ("+(m*6+180)+"deg)";
        min.style.oTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.webkitTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.msTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.mozTransform="rotateZ("+(m*6+180)+"deg)";
        //得到每一分钟走的角度 每一小时之间是30 / 一小时中间有5个格 =30/5=6度
        //每小时走360/12=30度
        var h=nowDate.getHours()+m/60;
        hour.style.transform="rotateZ("+(h*30+180)+"deg)";
        hour.style.oTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.msTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.mozTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.webkitTransform="rotateZ("+(h*30+180)+"deg)";
        //开启定时器,每一秒自动走
        var timer=window.setTimeout(run,1000);
    }
    //执行函数
    run();
</script>
</html>

 

以上是关于使用原生JS编写时钟的主要内容,如果未能解决你的问题,请参考以下文章

使用原生js仿写win10时钟

canvas :原生javascript编写动态时钟

js原生制作时钟

原生js之canvas时钟组件

仿智能社官网:原生JS实现简单又酷炫的3D立方体时钟

原生JS实现动态时钟(优化)