canvas制作时钟

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        canvas{
            border: 1px solid #ccc;
            display: block;
            margin: 50px auto;
            background: url(image/bg.jpg);
            border-radius: 50%;
        }
    </style>
</head>
<body>
    <canvas width="500" height="500"></canvas>
    <script>

        //构造函数
        function Clock() {
            this.ctx = document.querySelector('canvas').getContext('2d');
        }
        //原型
        Clock.prototype = {
            //初始化
            init: function(){
                this.ctx.clearRect(0,0,500,500)
                this.getTime();
                this.bgImage();
                this.drawScale();
                this.drawClockWise();

            },
            //画圆
            bgImage:function(){
                this.ctx.beginPath();
                this.ctx.arc(250,250,250,0,Math.PI*2,true);
                this.ctx.strokeStyle = "#333";
                this.ctx.lineWidth = "5";
                this.ctx.stroke();
                this.ctx.clip();//裁剪

                // var img = new Image();
                // img.src = "image/bg.jpg";
                // console.log('111');
                // this.ctx.drawImage(img,0,0,800,800);
                this.ctx.closePath();

            },
            //刻度
            drawScale: function(){
                //时刻度
                for (var i = 0; i < 12; i++) {
                    this.ctx.beginPath()
                    this.ctx.save();//保存当前位置
                    this.ctx.translate(250,250);
                    this.ctx.rotate(i * Math.PI/6);
                    this.ctx.lineWidth = 5;
                    this.ctx.moveTo(0,-245);
                    this.ctx.lineTo(0,-225);
                    this.ctx.stroke();
                    this.ctx.restore();
                }
                //分刻度
                for (var i = 0; i < 60; i++) {
                    this.ctx.beginPath()
                    this.ctx.save();//保存当前位置
                    this.ctx.translate(250,250);
                    this.ctx.rotate(i * Math.PI/30);
                    this.ctx.lineWidth = 5;
                    this.ctx.moveTo(0,-245);
                    this.ctx.lineTo(0,-235);
                    this.ctx.stroke();
                    this.ctx.restore();
                }
            },
            //针
            drawClockWise:function(){
                //时针
                this.ctx.beginPath();
                this.ctx.save();
                this.ctx.translate(250,250);
                this.ctx.rotate(this.hours *Math.PI/6)
                this.ctx.lineWidth = 5;
                this.ctx.moveTo(0,0);
                this.ctx.lineTo(0,-100);
                this.ctx.lineCap = 'round';
                this.ctx.stroke();
                this.ctx.restore();
                //分针
                this.ctx.beginPath();
                this.ctx.save();
                this.ctx.translate(250,250);
                this.ctx.rotate(this.min * 6 * Math.PI/180)
                this.ctx.lineWidth = 2;
                this.ctx.moveTo(0,0);
                this.ctx.lineTo(0,-170);
                this.ctx.lineCap = 'round';
                this.ctx.stroke();
                this.ctx.restore();
                //秒针
                this.ctx.beginPath();
                this.ctx.save();
                this.ctx.translate(250,250);
                this.ctx.rotate(this.sec*6*Math.PI/180)
                this.ctx.lineWidth = 1;
                this.ctx.moveTo(0,0);
                this.ctx.lineTo(0,-200);
                this.ctx.lineCap = 'round';
                this.ctx.stroke();
                this.ctx.restore();
                //中心的圆
                this.ctx.beginPath();
                this.ctx.save();
                this.ctx.arc(250,250,8,0,Math.PI*2);
                this.ctx.fillStyle = 'yellow';
                this.ctx.fill()
                this.ctx.stroke();
                this.ctx.restore();
                //秒针上的圆
                this.ctx.beginPath();
                this.ctx.save();
                this.ctx.translate(250,250);
                this.ctx.rotate(this.sec*6*Math.PI/180)
                this.ctx.lineWidth = 1;
                this.ctx.arc(0,-170,3,0,Math.PI*2);
                this.ctx.fillStyle = 'yellow';
                this.ctx.fill()
                this.ctx.stroke();

                this.ctx.restore();
            },
            //获取当前时间
            getTime:function(){
                this.today = new Date()
                this.hours = this.today.getHours();
                this.min = this.today.getMinutes();
                this.sec = this.today.getSeconds();
                // console.log(this.today);
                //把时针转化成12制
                this.hours = this.hours > 12 ? (this.hours-12):this.hours;
                //为了解决时针不变的bug
                this.hours = this.hours + this.min/60;
            }
        }
        //实例化对象
        var clock = new Clock();
        window.onload = function(){
            clock.init();
        };
        setInterval(function(){
            clock.init()
        },1000);
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值