美文网首页
使用canvas绘制时钟

使用canvas绘制时钟

作者: 伯纳乌的追风少年 | 来源:发表于2018-04-07 05:17 被阅读0次

使用canvas绘制这样的一个时钟,这个时钟完全是通过代码绘制而成,没有使用图片:


不多说,贴代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas 时钟</title>
    <style>
        div {
            text-align: center;
            margin-top: 250px;
        }
        #clock{
            border:1px solid #ccc;
        }
    </style>
</head>
<body>
    <div>
        <canvas id="clock" height="500px" width="500px"></canvas>
    </div>
    <script>
        var dom = document.getElementById('clock')
        var ctx = dom.getContext('2d')
        var width = ctx.canvas.width;
        var height = ctx.canvas.height;
        var r=width/2;
        var rem=width/400;

        function drawBackground(){
            //重新定义原点坐标
            ctx.translate(r,r)

            //画canvas需要调用beginPath开始一条路径
            ctx.beginPath()

            //设置线条宽度
            ctx.lineWidth=10*rem

            //画圆
            ctx.arc(0,0,r-10*rem/2,0,2*Math.PI,false)

            //绘制图形
            ctx.stroke()

            //绘制小时数
            var hourNumbers=[3,4,5,6,7,8,9,10,11,12,1,2]
            ctx.font=20*rem+'px Arial'
            ctx.textAlign='center'
            ctx.textBaseline='middle'
            hourNumbers.forEach(function(number,i){
                var rad=2*Math.PI/12*i
                var x=Math.cos(rad)*(r-40*rem)
                var y=Math.sin(rad)*(r-40*rem)
                ctx.fillText(number,x,y)
            })

            //绘制分钟的点
            for(var i=0;i<60;i++){
                var rad=2*Math.PI/60*i
                var x=Math.cos(rad)*(r-20*rem)
                var y=Math.sin(rad)*(r-20*rem)
                ctx.beginPath();
                if(i%5===0){
                    ctx.fillStyle='#000'
                    ctx.arc(x,y,2*rem,0,2*Math.PI,false)
                }else{
                    ctx.fillStyle='#ccc'
                    ctx.arc(x,y,2*rem,0,2*Math.PI,false)    
                }
                ctx.fill();
            }
        }

        //时针
        function drawHour(hour,minute){
            ctx.save();
            ctx.beginPath()
            var rad=2*Math.PI/12*(hour+minute/60)
            ctx.rotate(rad)
            ctx.lineWidth=12*rem
            ctx.lineCap='round'
            ctx.moveTo(0,10*rem)
            ctx.lineTo(0,-r/2)
            ctx.stroke()
            ctx.restore();
        }
        //分钟
        function drawMinute(minute,second){
            ctx.save();
            ctx.beginPath()
            var rad=2*Math.PI/60*(minute+second/60)
            ctx.rotate(rad)
            ctx.lineWidth=6*rem
            ctx.lineCap='round'
            ctx.moveTo(0,10*rem)
            ctx.lineTo(0,-r+60*rem)
            ctx.stroke()
            ctx.restore();
        }
        // 秒钟
        function drawSecond(second,milliseconds){
            ctx.save();
            ctx.beginPath()
            ctx.fillStyle="#c14543"
            var rad=2*Math.PI/60*(second+milliseconds/1000)
            ctx.rotate(rad)
            ctx.moveTo(-3*rem,20*rem)
            ctx.lineTo(3*rem,20*rem)
            ctx.lineTo(1,-r+36*rem)
            ctx.lineTo(-1,-r+36*rem)
            ctx.fill();
            ctx.restore();
        }
        //中间点
        function drawDot(){
            ctx.beginPath();
            ctx.fillStyle="#fff";
            ctx.arc(0,0,3*rem,0,2*Math.PI,false);
            ctx.fill();
        }
        
        //绘制
        function draw(){
            ctx.clearRect(0,0,width,height)
            var now=new Date();
            var hour=now.getHours();
            var minute=now.getMinutes();
            var second=now.getSeconds();
            var milliseconds=now.getMilliseconds()
            ctx.save();
            drawBackground();
            drawHour(hour,minute);
            drawMinute(minute,second);
            drawSecond(second,milliseconds);
            drawDot();
            ctx.restore();
        }

        //定时器
        setInterval(function(){
            draw()
        },40)

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

把这段代码保存成一个index.html文件,然后在浏览器中打开就可以了。

相关文章

  • 使用canvas绘制时钟

    使用canvas绘制这样的一个时钟,这个时钟完全是通过代码绘制而成,没有使用图片: 不多说,贴代码: 把这段代码保...

  • JavaScript-Html-绘制时钟

    使用Html控件canvas,利用JavaScript绘制时钟 效果图如下: 简书: http://www.jia...

  • canvas绘制时钟

  • canvas绘制时钟

    这里简单了利用canvas做了一个时钟,样式配的比较难看主要讲了这么实现功能集体的细节根据自己的喜好来调试,请读者...

  • Canvas绘制出一个时钟

    参考视频资料:Canvas 绘制时钟 最近复习到Canvas,先准备来段有趣的代码,用Canvas绘制出一个动态的...

  • 使用Canvas 绘制动态时钟

  • 时钟的绘制---canvas

  • Canvas绘制时钟效果

    Cnavas绘制时钟 背景图的绘制(大圆、数字、小圆点),掌握基础知识:圆的绘制(arc方法),关于圆的弧度的计算...

  • canvas 绘制时钟特效

    说明:作为canvas初学者,好多知识都还没来得及深入了解,写下特效实现的梗概,谨以此纪念自己的第一次canvas...

  • H5 新特性05

    SVG svg与canvas的区别 canvas绘制的是位图, svg绘制的是矢量图 canvas使用Ja...

网友评论

      本文标题:使用canvas绘制时钟

      本文链接:https://www.haomeiwen.com/subject/gkuehftx.html