码迷,mamicode.com
首页 > Web开发 > 详细

html5-canvas-时钟

时间:2015-07-31 13:03:04      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:html5   canvas   画布   时钟   

本文介绍了使用canvas来绘制时钟的案例。


效果图:

技术分享

代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

    <canvas id="clock" width="500" height="500" style="background: #F7F7F7">
        您的浏览器不支持canvas标签,无法看到时钟
    </canvas>

    <script>
        var clock = document.getElementById('clock');
        var ctx = clock.getContext('2d');

        function drawClock() {
            //清除画布(相当每隔1s就要清除前一次的画布,否则前一次的痕迹还存在)
            ctx.clearRect(0 , 0 , 500 , 500);

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

            //hour必须加上min转换成的小时浮点数
            hour = hour + min / 60.0;
            //min也可以加上sec转换成的分钟浮点数
            min = min + sec / 60.0;

            //将24小时进制转为12小时进制
            hour = hour > 12 ? hour - 12 : hour;

            //表盘(蓝色)
            ctx.lineWidth = 10;
            ctx.strokeStyle = "blue";
            ctx.beginPath();
            ctx.arc(250, 250, 200, 0, 360, false);
            ctx.closePath();
            ctx.stroke();

            //刻度
            //时刻度
            for (var i = 0; i < 12; i++) {
                ctx.save();
                ctx.lineWidth = 7; //时刻度的粗细
                ctx.strokeStyle = "#000"; //时刻度的颜色
                ctx.translate(250, 250); //设置异次元空间的0,0点
                //再设置旋转角度
                ctx.rotate(i * 30 * Math.PI / 180); //每小时旋转30度
                ctx.beginPath();
                ctx.moveTo(0, -170);
                ctx.lineTo(0, -190);
                ctx.closePath();
                ctx.stroke();
                ctx.restore();
            }

            //分刻度
            for (var i = 0; i < 60; i++) {
                ctx.save();
                ctx.lineWidth = 5;
                ctx.strokeStyle = "#000";
                ctx.translate(250, 250); //设置异次元空间的0,0点
                ctx.rotate(i * 6 * Math.PI / 180); //每分钟旋转6度
                ctx.beginPath();
                ctx.moveTo(0, -180);
                ctx.lineTo(0, -190);
                ctx.closePath();
                ctx.stroke();
                ctx.restore();
            }

            //时针
            ctx.save();
            ctx.lineWidth = 7;
            ctx.strokeStyle = "#000";
            ctx.translate(250, 250); //设置异次元空间的0,0点
            ctx.rotate(hour * 30 * Math.PI / 180); //每小时转30度
            ctx.beginPath();
            ctx.moveTo(0, -130);
            ctx.lineTo(0, 10);
            ctx.closePath();
            ctx.stroke();
            ctx.restore();

            //分针
            ctx.save();
            ctx.lineWidth = 5;
            ctx.strokeStyle = "#000";
            ctx.translate(250, 250);
            ctx.rotate(min * 6 * Math.PI / 180); //每分钟转6度
            ctx.beginPath();
            ctx.moveTo(0, -160);
            ctx.lineTo(0, 15);
            ctx.closePath();
            ctx.stroke();
            ctx.restore();

            //秒针
            ctx.save();
            ctx.lineWidth = 3;
            ctx.strokeStyle = "red";
            ctx.translate(250, 250);
            ctx.rotate(sec * 6 * Math.PI / 180); //每秒转6度
            ctx.beginPath();
            ctx.moveTo(0, -170);
            ctx.lineTo(0, 25);
            ctx.closePath();
            ctx.stroke();

            //画时针、分针、秒针交叉的小圆圈
            ctx.beginPath();
            ctx.arc(0 , 0 , 5 , 0 , 360 , false);
            ctx.closePath();
            ctx.fillStyle = "gray"; //填充样式
            ctx.fill();
            //设置笔触样式(秒针已设置了)
            ctx.stroke();

            //画秒针上的小圆圈
            ctx.beginPath();
            ctx.arc(0 , -140 , 5 , 0 , 360 , false);
            ctx.closePath();
            ctx.fill(); //填充样式用上一次的
            ctx.stroke(); //笔触样式用上一次的

            ctx.restore();
        }

        drawClock(); //防止刷新后隔一秒钟才加载

        //使用setInterval(代码/函数 , 毫秒时间) 让时钟动起来
        setInterval(drawClock , 1000); //每隔1s动一次
    </script>

</body>
</html>


版权声明:本文为博主原创文章,未经博主允许不得转载。

html5-canvas-时钟

标签:html5   canvas   画布   时钟   

原文地址:http://blog.csdn.net/u013488580/article/details/47167601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!