canvas画布带时间的钟表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    <canvas id="sb" width="1000px" height="800px" style="border:1px solid black"></canvas>
</body>
    <script type="text/javascript">
        var s = sb.getContext("2d");
        
        function shijian(){
            var arr = [6,7,8,9,10,11,12,1,2,3,4,5];
            s.clearRect(0,0,1000,800);
            s.beginPath();
        s.lineWidth = "10";
        s.arc(400,400,300,0,360,false);
        s.stroke();
        s.closePath();

        s.save();
        s.beginPath();
        s.font = "20px 微软雅黑";
        s.textAlign = "center";
        s.textBaseline = "middle";
        s.fillStyle = "black";
        s.fill();
        s.fillText("BeiJing",400,200);
        s.closePath();
        s.restore();

        //画出一个圆心
        s.save();
        s.translate(400, 400);
        s.beginPath();
        s.arc(0,0,1,0,Math.PI * 2,false);
        s.fillStyle = "#000";
        s.fill();
        s.stroke();
        s.closePath();
        s.restore();
        //小时刻度
        for(var i = 0 ; i < 12 ; i++){
            s.save();
            s.translate(400, 400);
            s.rotate(Math.PI/180 * 30 * i);
            s.beginPath();
            s.moveTo(0,-300);
            s.lineTo(0,-280);
            s.lineWidth = "7";
            s.stroke();
            s.closePath();
            s.restore();
        }

            //画小时数
        var hour = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2];
        
        for(var i = 0 ; i < 12 ; i++){
            s.beginPath();
            //12个时针刻度
            var rad = 2 * Math.PI / 12 * i;
            //获得此弧度的横纵坐标
            1.以3点为起点,顺时针方向
            横坐标 = 圆的横坐标 + Math.cos(弧度) * 半径
            纵坐标 = 圆的纵坐标 + Math.sin(弧度) * 半径
            2.以6点为起点,逆时针方向
            横坐标 = 圆的横坐标 + Math.sin(弧度) * 半径
            纵坐标 = 圆的纵坐标 + Math.cos(弧度) * 半径
            var x = Math.cos(rad) * 270;
            var y = Math.sin(rad) * 270;
            console.log(x,y);
            s.font = "18px sans-serif"
            s.textAlign = "center";
            s.textBaseline = "middle";
            s.fillStyle='red';
            s.fill();
            s.fillText(hour[i], x+400, y+400);
            s.closePath();
        }

        //分刻度
        for(var i = 0 ; i < 60 ; i++){
            s.save();
            s.translate(400, 400);
            s.rotate(Math.PI /180 * 6 * i);
            s.beginPath();
            s.moveTo(0,-300);
            s.lineTo(0, -290);
            s.lineWidth = "5";
            s.stroke();
            s.closePath();
            s.restore();
        }

        var time = new Date();
        var hours = time.getHours();
        var minutes = time.getMinutes();
        var seconds = time.getSeconds();
        hours = hours > 12 ? hours -12 + (minutes / 60) : hours +(minutes / 60);
        //画秒针
        s.save();
        s.translate(400,400);
        s.rotate(Math.PI / 30 * seconds);
        s.beginPath();
        s.moveTo(0,15);
        s.lineTo(0,-150);
        s.strokeStyle = "red";
        s.lineWidth = "3";
        s.stroke();
        s.closePath();
        s.restore();


        //画分针
        s.save();
        s.translate(400,400);
        s.rotate(Math.PI / 30 * minutes);
        s.beginPath();
        s.moveTo(0,15);
        s.lineTo(0,-80);
        s.strokeStyle = "blue";
        s.lineWidth = "4";
        s.stroke();
        s.closePath();
        s.restore();

        //画时针
        s.save();
        s.translate(400,400);
        s.rotate(Math.PI / 6 * hours);
        s.beginPath();
        s.moveTo(0,15);
        s.lineTo(0,-60);
        s.strokeStyle = "orange";
        s.lineWidth = "5";
        s.stroke();
        s.closePath();
        s.restore();
        }
        shijian()
        setInterval(shijian, 1000)


        
    </script>
</html>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值