javascript 画时针


代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clock</title>
    <style>
        body{
            background-color: pink;
        }
        #clock{
            display: block;
            margin:auto;
            background-color: burlywood;
        }
    </style>
    <script>
        window.onload = function () {
            var canvas = document.getElementById("clock");
            var context = canvas.getContext("2d");
            
            function drawClock() {
                context.clearRect(0,0,canvas.width,canvas.height);
                var circleX = 200;
                var circleY = 200;
                var radius = 190;

                //获取时间信息
                var date = new Date();
                var hour = date.getHours();
                var min = date.getMinutes();
                var sec = date.getSeconds();

                //时针,分针,秒针的弧度计算(下面有详细推导过程)
                var hourValue = (-90 + 30*hour + min/2 + sec/120)*Math.PI/180;
                var minValue = (-90 + 6*min + 0.1*sec)*Math.PI/180;
                var secValue = (-90 + 6*sec)*Math.PI/180;

                //绘制表盘
                context.beginPath();     //相当于提起笔,准备下一次绘图,并把绘图的坐标重置在(0,0)
                context.font = "bold 16px Arial";
                context.lineWidth = "3";

                context.arc(circleX,circleY,radius,0,360*Math.PI/180)
                context.stroke();//下笔画

                context.fillStyle='#0ff';
                context.beginPath();    // 提起笔
                context.moveTo(circleX,circleY);
                context.arc(circleX,circleY,radius*19/20,0,360*Math.PI/180,false);
                context.closePath();//笔尖回到起点
                context.fill();

                //绘制钟表中心(一点)
                context.beginPath();
                context.arc(200,200,6,0,360,false)
                context.fillStyle="#000"
                context.fill()
                context.closePath()

                //绘制时针
                context.lineWidth = "5"
                context.beginPath()
                context.moveTo(circleX,circleY)
                context.arc(circleX,circleY,radius*9/20,hourValue,hourValue,false)
                context.stroke()

                //绘制分针
                context.lineWidth = "3"
                context.beginPath()
                context.moveTo(circleX,circleY)
                context.arc(circleX,circleY,radius*13/20,minValue,minValue,false)
                context.stroke()

                //绘制秒针
                context.lineWidth = "1"
                context.beginPath()
                context.moveTo(circleX,circleY)
                context.arc(circleX,circleY,radius*18/20,secValue,secValue,false)
                context.stroke()

                //绘制数字
                context.fillText("12",circleX,circleY-radius*17/20)
                context.fillText("3",circleX+radius*17/20,circleY)
                context.fillText("6",circleX,circleY+radius*17/20)
                context.fillText("9",circleX-radius*17/20,circleY)
            }
            setInterval(drawClock,1000)
            //drawClock();
        }
    </script>
</head>
<body>
    <canvas id="clock" width="400" height="400"></canvas>
</body>
</html>


时针,分针,秒针的弧度推导过程:

弧度 = 角度数 * Math.PI/180;


时针:

时针转一圈: 即360°,12小时,所以,时针1小时转 360/12 = 30°

又,1小时为 60分钟,3600秒,即时针转30°为60分钟,3600秒。

所以,每分钟时钟转 0.5°,每秒钟,时钟转 30/3600 = 1/120  °

所以若得知,时分秒的值,可算的时钟转过的度数为 (30*hour+0.5*min+1/120*sec)

由于时钟是从12点钟方向开始算起的(一般0°是在水平方向),所以要 -90°

所以 时针划过的弧度数为: (-90 + 30*hour+0.5*min+1/120*sec)*Math.PI/180


分针:

由于分钟转过一圈(360°)为 60min 所以 1min转过 360/60 = 6°

又一分钟 60秒,即60秒,分针转过6°,所以每秒分针转过 6/60 = 0.1°

所以 分针划过的弧度数为: (-90 + 6*min+ 0.1*sec)*Math.PI/180


秒针:

秒针转过一圈(360°)为60秒,所以每秒转过 360/60 =6°

所以 秒针划过的弧度数为:(-90 + 6*sec)*Math.PI/180

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值