使用原生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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM