Canvas + JS 實現簡易的時鍾


之前學習了下html5中的canvas元素,為了練練手就實現了一個簡易的時鍾。時鍾本身並不復雜,也沒有使用圖片進行美化,不過麻雀雖小五臟俱全,下面就與大家分享一下:

  • 實現效果:

        

  • html代碼:
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Clock</title>
        <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .canvas{
            margin-left: 20px;
            margin-top: 20px;
            border: solid 1px;
        }
        </style>
    </head>
    <body onload= "main()">
    
    <canvas class = "canvas" id="canvasId" width = '500px' height = '400px'></canvas>
    
    <script type= "text/javascript" src = "Clock.js"></script>
    </body>
    </html>
  • JS代碼:
    var Canvas = {};
    
    Canvas.cxt = document.getElementById('canvasId').getContext('2d');
    
    Canvas.Point = function(x, y){
        this.x = x;
        this.y = y;
    };
    
    /*擦除canvas上的所有圖形*/
    Canvas.clearCxt = function(){
        var me = this;
        var canvas = me.cxt.canvas;
           me.cxt.clearRect(0,0, canvas.offsetWidth, canvas.offsetHeight);
    };
    
    /*時鍾*/
    Canvas.Clock = function(){
        var me = Canvas,
            c = me.cxt,
            radius = 150, /*半徑*/
            scale = 20, /*刻度長度*/
            minangle = (1/30)*Math.PI, /*一分鍾的弧度*/
            hourangle = (1/6)*Math.PI, /*一小時的弧度*/
            hourHandLength = radius/2, /*時針長度*/
            minHandLength = radius/3*2, /*分針長度*/
            secHandLength = radius/10*9, /*秒針長度*/
            center = new me.Point(c.canvas.width/2, c.canvas.height/2); /*圓心*/
       
        /*繪制圓心(表盤中心)*/
        function drawCenter(){
            c.save();
    
            c.translate(center.x, center.y); 
    
            c.fillStyle = 'black';
            c.beginPath();
            c.arc(0, 0, radius/20, 0, 2*Math.PI);
            c.closePath();
            c.fill();
            c.stroke();
    
            c.restore();
        };
    
        /*通過坐標變換繪制表盤*/
        function drawBackGround(){
            c.save();
    
            c.translate(center.x, center.y); /*平移變換*/
            /*繪制刻度*/
            function drawScale(){
               c.moveTo(radius - scale, 0);
               c.lineTo(radius, 0); 
            };
    
            c.beginPath();
            c.arc(0, 0, radius, 0, 2*Math.PI, true);
            c.closePath();
        
            for (var i = 1; i <= 12; i++) {
               drawScale();
               c.rotate(hourangle); /*旋轉變換*/
            };
            /*繪制時間(3,6,9,12)*/
            c.font = " bold 30px impack"
            c.fillText("3", 110, 10);
            c.fillText("6", -7, 120);
            c.fillText("9", -120, 10);
            c.fillText("12", -16, -100);
            c.stroke();
    
            c.restore();
        };
    
        /*繪制時針(h: 當前時(24小時制))*/
        this.drawHourHand = function(h){
    
            h = h === 0? 24: h;
    
            c.save();
            c.translate(center.x, center.y); 
            c.rotate(3/2*Math.PI);
    
            c.rotate(h*hourangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(hourHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*繪制分針(m: 當前分)*/
        this.drawMinHand = function(m){
    
            m = m === 0? 60: m;
    
            c.save();
            c.translate(center.x, center.y); 
            c.rotate(3/2*Math.PI);
    
            c.rotate(m*minangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(minHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*繪制秒針(s:當前秒)*/
        this.drawSecHand = function(s){
    
            s = s === 0? 60: s;
    
            c.save();
            c.translate(center.x, center.y); 
            c.rotate(3/2*Math.PI);
    
            c.rotate(s*minangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(secHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*依據本機時間繪制時鍾*/
        this.drawClock = function(){
            var me = this;
     
            function draw(){
               var date = new Date();
    
               Canvas.clearCxt();
    
               drawBackGround();
               drawCenter();
               me.drawHourHand(date.getHours() + date.getMinutes()/60);
               me.drawMinHand(date.getMinutes() + date.getSeconds()/60);
               me.drawSecHand(date.getSeconds());
            }
            draw();
            setInterval(draw, 1000);
        };  
    };
    
     var main = function(){
        var clock = new Canvas.Clock();
        clock.drawClock();
    };

代碼中涉及到了一些簡單的canvas元素API 大家google一下即可,祝大家學習愉快:-D

               


免責聲明!

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



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