Canvas + JS 实现简易的时钟

之前学习了下html5中的canvas元素,为了练练手就实现了一个简易的时钟。时钟本身并不复杂,也没有使用图片进行美化,不过麻雀虽小五脏俱全,下面就与大家分享一下:

  • 实现效果:

  • html代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Clock</title>
        <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .canvas{
            margin-left: 20px;
            margin-top: 20px;
            border: solid 1px;
        }
        </style>
    </head>
    <body onload= "main()">
    
    <canvas class = "canvas" id="canvasId" width = ‘500px‘ height = ‘400px‘></canvas>
    
    <script type= "text/javascript" src = "Clock.js"></script>
    </body>
    </html>
  • JS代码:

    var Canvas = {};
    
    Canvas.cxt = document.getElementById(‘canvasId‘).getContext(‘2d‘);
    
    Canvas.Point = function(x, y){
        this.x = x;
        this.y = y;
    };
    
    /*擦除canvas上的所有图形*/
    Canvas.clearCxt = function(){
        var me = this;
        var canvas = me.cxt.canvas;
           me.cxt.clearRect(0,0, canvas.offsetWidth, canvas.offsetHeight);
    };
    
    /*时钟*/
    Canvas.Clock = function(){
        var me = Canvas,
            c = me.cxt,
            radius = 150, /*半径*/
            scale = 20, /*刻度长度*/
            minangle = (1/30)*Math.PI, /*一分钟的弧度*/
            hourangle = (1/6)*Math.PI, /*一小时的弧度*/
            hourHandLength = radius/2, /*时针长度*/
            minHandLength = radius/3*2, /*分针长度*/
            secHandLength = radius/10*9, /*秒针长度*/
            center = new me.Point(c.canvas.width/2, c.canvas.height/2); /*圆心*/
    
        /*绘制圆心(表盘中心)*/
        function drawCenter(){
            c.save();
    
            c.translate(center.x, center.y); 
    
            c.fillStyle = ‘black‘;
            c.beginPath();
            c.arc(0, 0, radius/20, 0, 2*Math.PI);
            c.closePath();
            c.fill();
            c.stroke();
    
            c.restore();
        };
    
        /*通过坐标变换绘制表盘*/
        function drawBackGround(){
            c.save();
    
            c.translate(center.x, center.y); /*平移变换*/
            /*绘制刻度*/
            function drawScale(){
               c.moveTo(radius - scale, 0);
               c.lineTo(radius, 0);
            };
    
            c.beginPath();
            c.arc(0, 0, radius, 0, 2*Math.PI, true);
            c.closePath();
    
            for (var i = 1; i <= 12; i++) {
               drawScale();
               c.rotate(hourangle); /*旋转变换*/
            };
            /*绘制时间(3,6,9,12)*/
            c.font = " bold 30px impack"
            c.fillText("3", 110, 10);
            c.fillText("6", -7, 120);
            c.fillText("9", -120, 10);
            c.fillText("12", -16, -100);
            c.stroke();
    
            c.restore();
        };
    
        /*绘制时针(h: 当前时(24小时制))*/
        this.drawHourHand = function(h){
    
            h = h === 0? 24: h;
    
            c.save();
            c.translate(center.x, center.y);
            c.rotate(3/2*Math.PI);
    
            c.rotate(h*hourangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(hourHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*绘制分针(m: 当前分)*/
        this.drawMinHand = function(m){
    
            m = m === 0? 60: m;
    
            c.save();
            c.translate(center.x, center.y);
            c.rotate(3/2*Math.PI);
    
            c.rotate(m*minangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(minHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*绘制秒针(s:当前秒)*/
        this.drawSecHand = function(s){
    
            s = s === 0? 60: s;
    
            c.save();
            c.translate(center.x, center.y);
            c.rotate(3/2*Math.PI);
    
            c.rotate(s*minangle);
    
            c.beginPath();
            c.moveTo(0, 0);
            c.lineTo(secHandLength, 0);
            c.stroke();
            c.restore();
        };
    
        /*依据本机时间绘制时钟*/
        this.drawClock = function(){
            var me = this;
    
            function draw(){
               var date = new Date();
    
               Canvas.clearCxt();
    
               drawBackGround();
               drawCenter();
               me.drawHourHand(date.getHours() + date.getMinutes()/60);
               me.drawMinHand(date.getMinutes() + date.getSeconds()/60);
               me.drawSecHand(date.getSeconds());
            }
            draw();
            setInterval(draw, 1000);
        };
    };
    
     var main = function(){
        var clock = new Canvas.Clock();
        clock.drawClock();
    };

代码中涉及到了一些简单的canvas元素API 大家google一下即可,祝大家学习愉快:-D

时间: 2024-11-10 01:17:13

Canvas + JS 实现简易的时钟的相关文章

通过Canvas + JS 实现简易时钟实战

最近通过各种渠道学习了下html5中的canvas元素,为了练练手就随手写了一个简易的时钟.时钟本身不复杂,没有使用图片进行美化,下面就与大家分享一下具体的代码: 这是最终实现的效果: 部分的启发点来自于 http://developer.51cto.com/art/201503/467645.htm html代码: <!DOCTYPE html>     <html>     <head>         <meta http-equiv="Conte

用canvas画“哆啦A梦”时钟

前言:今天看完了Js书的canvas画布那张,好开心~又是心爱的canvas~欧耶~ 之前看到有人建议我画蓝胖子,对哦,我怎么把童年最喜欢的蓝胖子忘了,为了表达我对蓝胖子的歉意,所以今天画了会动的hello world,也算是一种进步咯~ 好的各位,请上车的乘客往里走,请不要堵塞通道,谢谢.我们开车吧~ 正文: 今天先上图吧,看看效果再说 今天的蓝胖子长这样,看到它还是这么胖,我就放心了.这世界还是充满正能量的,总归还有人比我胖,哈哈哈 然后是上代码 html部分 <canvas id="

网页计算器 &amp;&amp; 简易网页时钟 &amp;&amp; 倒计时时钟

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

html5 canvas+js实现ps钢笔抠图

html5 canvas+js实现ps钢笔抠图 1. 项目要求需要用js实现photoshop中钢笔抠图功能,就用了近三四天的时间去解决它,最终还是基本上把他实现了. 做的过程中走了不少弯路,最终一同事找到了canvans以比较核心的属性globalCompositeOperation = "destination-out", 属性可以实现通过由多个点构成的闭合区间设置成透明色穿透画布背景色或是背景图片,这样省了许多事. 2.实现效果: 鼠标点完之后会将所有的点连成闭合区间,并可自由拖

js+css3实现动态时钟-------Day66

昨天搬家一天,宽带到最后也没有安装上,颇为恼火,但是收拾了一天新租的房屋,倒有了颇多的想法,这里先来实现一个--动态时钟(已经上传到资源里了,图片整的有些粗糙了,汗...) 这里来记录下,这个看起来简单好实现的功能,我在实现的过程中碰到了哪些问题,因为这时还没查看网上的代码,只是根据自己现阶段的学习来做的,可能会有些麻烦,有些粗糙,但是终归是实现了这个效果,心里还是小开心了下. 先来张最终实现的效果图(静态图片); 首先准备素材,我从网上搜到了一个时钟的素材,谁让我的ps还菜的菜呢,然后我有了表

使用node.js制作简易爬虫

最近看了些node.js方面的知识,就像拿它来做些什么.因为自己喜欢摄影,经常上蜂鸟网,所以寻思了一下,干脆做个简单的爬虫来扒论坛的帖子. 直接上代码吧. 1 var sys = require("sys"), 2 http = require("http"), 3 fs = require("fs"); 4 var url = "http://newbbs.fengniao.com/forum/forum_125.html"

js简单 图片版时钟,带翻转效果

js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>时钟</title> <style type="text/css"> ul,li{ list-style: none; margin: 0; padding: 0; } ul{ position: absolute; left: 2

使用html+css+js实现简易计算器

使用html+css+js实现简易计算器, 效果图如下: html代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6

原生JS实现简易轮播图

原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = function() { var tab = 0; var loop_imgs = new Array("img/l1.jpg", "img/l2.jpg", "img/l3.jpg", "img/l4.jpg", "img/l5