canvas-实例时钟

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>canvas-clock</title>
</head>
<body>
    <canvas id="canvas" width="500px" height="500px">
        你的浏览器不支持该元素!赶紧下载最新版本浏览器或使用其他浏览器!
    </canvas>
    <script>
        //获取到canvas元素
        var canvas = document.getElementById('canvas');
        //获取canvas中的画图环境
        var context = canvas.getContext('2d');


        //时钟的大小
        function drowClock(){
            //钟表的大小:初始值设置
            var clockDimensions = 150;

            //清理当前画布,以便后期绘制
            context.clearRect(0,0,canvas.width,canvas.height);
            //绘制表盘
            context.beginPath(); //开启新路径
            context.lineWidth = clockDimensions/15;
            context.strokeStyle = "#A7C0DC";
            //绘制表盘圆圈
            context.arc(canvas.width/2,canvas.height/2,clockDimensions,0,Math.PI*2,false);
            context.stroke();//描边绘制

            //绘制表盘的刻度线
            for(var i=1;i<=60;i++){
                if(i%5==0){
                    context.save();//保存当前绘制环境
                    context.beginPath();
                    context.lineWidth =clockDimensions/30;
                    context.strokeStyle = "#9AABB1";
                    //重置坐标原点(0,0)
                    context.translate(canvas.width/2,canvas.height/2);
                    //绘制环境旋转方法,以(0,0)为参考点进行旋转
                    context.rotate(Math.PI*2/60 * i);
                    context.moveTo(0,clockDimensions-clockDimensions/30);
                    context.lineTo(0,clockDimensions-clockDimensions/8);
                    context.stroke();
                    context.beginPath();
                    context.textAlign = 'center';
                    context.textBaseline = 'middle';
                    context.font = 'bold '+Math.floor(clockDimensions/10)+'px 宋体';
                    context.fillStyle = "#03671F";
                    context.fillText(i/5,0,0-(clockDimensions-clockDimensions/5));
                    context.fill();
                    context.restore();//恢复当前保存的绘制环境
                }else {
                    context.save();
                    context.beginPath();
                    context.lineWidth = Math.floor(clockDimensions/100);
                    context.strokeStyle = "#8EA5AB";
                    //重置坐标原点(0,0)
                    context.translate(canvas.width / 2, canvas.height / 2);
                    //绘制环境旋转方法,以(0,0)为参考点进行旋转
                    context.rotate(Math.PI * 2 / 60 * i);
                    context.moveTo(0, clockDimensions-clockDimensions/20);
                    context.lineTo(0,  clockDimensions-clockDimensions/10);
                    context.stroke();
                    context.restore();
                }
            }

            //获取当前windows的时间
            var now = new Date();
            var sec = now.getSeconds();
            var min = now.getMinutes();
            var hour = now.getHours();

            //获取精准的小时数
            hour = hour +min/60 + sec/3600;
            //转换为12进制
            hour = hour>12?(hour-12):hour;
            //获取精准的分钟数
            min = min + sec/60;

            //绘制时针
            context.save();
            context.beginPath();
            context.lineWidth = clockDimensions/30;
            context.strokeStyle = "#596C74";
            //重置坐标原点(0,0)
            context.translate(canvas.width / 2, canvas.height / 2);
            //绘制环境旋转方法,以(0,0)为参考点进行旋转
            context.rotate(Math.PI * 2 / 12 * hour);
            context.moveTo(0, clockDimensions/10);
            context.lineTo(0, 0-clockDimensions/2);
            context.stroke();
            context.restore();

            //绘制分针
            context.save();
            context.beginPath();
            context.lineWidth = clockDimensions/40;
            context.strokeStyle = "#596C74";
            //重置坐标原点(0,0)
            context.translate(canvas.width / 2, canvas.height / 2);
            //绘制环境旋转方法,以(0,0)为参考点进行旋转
            context.rotate(Math.PI * 2 / 60 * min);
            context.moveTo(0, clockDimensions/8);
            context.lineTo(0, 0-(clockDimensions-clockDimensions/5));
            context.stroke();
            context.restore();

            //绘制秒针
            context.save();
            //重置坐标原点(0,0)
            context.translate(canvas.width / 2, canvas.height / 2);
            context.beginPath();
            context.lineWidth = clockDimensions/50;
            context.strokeStyle = "#738B93";
            //绘制环境旋转方法,以(0,0)为参考点进行旋转
            context.rotate(Math.PI * 2 / 60 * sec);
            context.moveTo(0, clockDimensions/6);
            context.lineTo(0, 0-(clockDimensions-clockDimensions/10));
            context.stroke();
            //修饰秒针
            context.beginPath();
            context.arc(0,0-(clockDimensions-clockDimensions/3),clockDimensions/20,0,Math.PI*2,true);
            context.fillStyle = "#2FFC14";
            context.fill();
            context.lineWidth = clockDimensions/50;
            context.stroke();
            //修饰圆心
            context.beginPath();
            context.fillStyle = "#738B93";
            context.arc(0,0,clockDimensions/20,0,Math.PI*2,true);
            context.fill();
            context.restore();
        }
        drowClock();
        setInterval(drowClock,1000);

    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值