canvas绘制时钟

效果图

这里写图片描述
可以实时获取当前时间,有动态旋转的效果,如果在html里改变height和width 不改变图片样式

<canvas id="clock" height="200px" width="200px">
html
<DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>canvas clock</title>
        <style type="text/css">
            div{
                text-align:center;
                margin-top:250px;
            }
            #clock{
                border:1px solid #ccc;
            }
        </style>
    </head>

    <body>
        <div>
            <canvas id="clock" height="200px" width="200px"></canvas>
        </div>

        <script type="text/javascript" src="clock.js"></script>

    </body>

    </html>
JS
var dom =document.getElementById('clock');
var ctx =dom.getContext('2d');
var width =ctx.canvas.width;
var height = ctx.canvas.height;
var r = width/2;
var rem =width/200;

function drawBackground(){
    ctx.save();
    ctx.translate(r,r);
    ctx.beginPath();
    ctx.lineWidth=10*rem;
    ctx.arc(0,0,r-ctx.lineWidth/2,0,2*Math.PI,false);
    ctx.stroke();

    var hourNumber = [3,4,5,6,7,8,9,10,11,12,1,2];
    ctx.font=18*rem+'px,Arial';
    ctx.textAlign='center';
    ctx.textBaseline='middle';
    hourNumber.forEach(function(number , i ){
        var rad=2*Math.PI/12*i;
        var x=Math.cos(rad)*(r-30*rem);
        var y=Math.sin(rad)*(r-30*rem);
        ctx.fillText(number, x, y);
    });

    for(var i=0;i<60;i++){
        var rad=2*Math.PI/60*i;
        var x=Math.cos(rad)*(r-18*rem);
        var y=Math.sin(rad)*(r-18*rem);
        ctx.beginPath();
        if(i%5===0){
            ctx.fillStyle='#000';
            ctx.arc(x,y,2*rem,0,2*Math.PI,false);
        }else{
            ctx.fillStyle='#ccc';
            ctx.arc(x,y,2*rem,0,2*Math.PI,false);
        }
        ctx.fill();
    }
}

function drawHour(hour,minute){
    ctx.save();
    ctx.beginPath();
    var rad=2*Math.PI/12*hour;
    var mrad=2*Math.PI/12/60*minute;
    ctx.rotate(rad+mrad);
    ctx.lineWidth=6*rem;
    ctx.lineCap='round';
    ctx.moveTo(0,10);
    ctx.lineTo(0,-r/2);
    ctx.stroke();
    ctx.restore();

}

function  drawMinute(minute){
    ctx.save();
    ctx.beginPath();
    var rad=2*Math.PI/60*minute;
    ctx.rotate(rad);
    ctx.lineWidth=3*rem;
    ctx.lineCap='round';
    ctx.moveTo(0,10*rem);
    ctx.lineTo(0,-r+30*rem);
    ctx.stroke();
    ctx.restore();
}

function drawSecond(second){
    ctx.save();
    ctx.beginPath();
    ctx.fillStyle='#c14543';
    var rad=2*Math.PI/60*second;
    ctx.rotate(rad);
    ctx.moveTo(-2*rem,20*rem);
    ctx.lineTo(2*rem,20*rem);
    ctx.lineTo(1,-r+18*rem);
    ctx.lineTo(-1,-r+18*rem);
    ctx.fill();
    ctx.restore();
}

function drawDot(){
    ctx.beginPath();
    ctx.fillStyle='#fff';
    ctx.arc(0,0,3*rem,0,2*Math.PI,false);
    ctx.fill();
}


function draw(){
    ctx.clearRect(0,0,width,height);
    var now=new Date();
    var hour=now.getHours();
    var minute=now.getMinutes();
    var second=now.getSeconds();
    drawBackground();
    drawHour(hour,minute);
    drawMinute(minute);
    drawSecond(second);
    drawDot();
    ctx.restore();
}


draw();
setInterval(draw,1000);







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值