利用 html5 canvas 完成一个实时时钟 demo

利用canvas实现一个实时时钟动画

效果
在这里插入图片描述

直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="mycanvas" width=" 400" height="400"></canvas>
    <script>
        var mycarvas = document.querySelector('#mycanvas')
        //获取上下文(绘画环境)
        var ctx = mycanvas.getContext("2d");
        (function play () {
            //清除上一次
            ctx.clearRect(0,0,mycanvas.width,mycanvas.height)
            //保存
            ctx.save()
            //确定中心点
            ctx.translate(mycanvas.width/2,mycanvas.height/2);
            biaopan ()
            run ()
            //还原
            ctx.restore()
            requestAnimationFrame(play)
        })()
        //绘制静态
        function biaopan () {
        	//绘制表盘
            ctx.strokeStyle = '#777'
            ctx.lineWidth = 6;
            //初始化路径
            ctx.beginPath()
            //画圆
            ctx.arc(0,0,150,0,2*Math.PI)
            ctx.stroke()
            //分针刻度
            ctx.strokeStyle = '#ccc'
            ctx.lineWidth = 2
            for(var i = 0;i<60;i++){
                ctx.beginPath()
                ctx.moveTo(0,-130)
                ctx.lineTo(0,-140)
                ctx.stroke()
                ctx.rotate(2*Math.PI/60)
            }
            //时针刻度 
            ctx.strokeStyle = '#17f'
            ctx.lineWidth = 6
            for(var i = 0;i<12;i++){
                ctx.beginPath()
                ctx.moveTo(0,-120)
                ctx.lineTo(0,-140)
                ctx.stroke()
                ctx.rotate(2*Math.PI/12)
            }
            //数字
            ctx.textAlign = 'center'
            ctx.textBaseline = 'middle'
            ctx.fillStyle = 'green'
            ctx.font = '20px 微软雅黑'
            for(var i=1; i<13;i++) {
                ctx.fillText(i,Math.sin(2*Math.PI/12*i)*100,Math.cos(2*Math.PI/12*i)*-100)
            }
        }
        //绘制动态
        function run () {
            //得到现在时间
            var d = new Date()
            var h = d.getHours()
            var m = d.getMinutes()
            var s = d.getSeconds()
            
            //时针
            ctx.save()
            //分针走60小格,时针走5小格,分针12格,时针1格
            ctx.rotate(2*Math.PI/12*h+(2*Math.PI/60*m+2*Math.PI/60*s/60)/12)
            ctx.strokeStyle = 'blue'
            ctx.lineWidth = 8
            ctx.beginPath()
            ctx.moveTo(0,18)
            ctx.lineTo(0,-60)
            ctx.stroke()
            ctx.restore()
            //分针
            ctx.save()
            //秒针走60格,分针走一格
            ctx.rotate(2*Math.PI/60*m+2*Math.PI/60*s/60)
            ctx.strokeStyle = '#f71'
            ctx.lineWidth = 4
            ctx.beginPath()
            ctx.moveTo(0,20)
            ctx.lineTo(0,-100)
            ctx.stroke()
            ctx.restore()
            //秒针
            ctx.save()
            ctx.rotate(2*Math.PI/60*s)
            ctx.strokeStyle = '#f00'
            ctx.lineWidth = 4
            ctx.beginPath()
            ctx.moveTo(0,20)
            ctx.lineTo(0,-110)
            ctx.stroke()
            ctx.restore()
            //中心圆
            ctx.fillStyle = '#777'
            ctx.beginPath()
            ctx.arc(0,0,10,0,2*Math.PI)
            ctx.fill()
        }
        
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值