一个简单的html5 canvas时钟例子

第一次学习如何使用canvas,感觉用起来还挺顺手,期间查了很多api,也参考了别人的例子,下面就是我成果,希望能帮助到路过的你:

 代码如下 复制代码

'use strict';

var clock = {
 init: function(){
     var _this = this;
     _this.load();
     setInterval(function(){
         _this.load();
     },1000)
 },

 load: function(){
     var date         = new Date();
         this.hours   = date.getHours(),
         this.minutes = date.getMinutes(),
         this.seconds = date.getSeconds(),
         this.deg     = Math.PI / 180;
         this.canvas  = document.getElementById('canvas'),
         this.ctx     = this.canvas.getContext('2d'),
         this.width   = this.canvas.height = 400,
         this.height  = this.canvas.width  = 400;

     this.ctx.translate(this.width/2, this.height/2); //居中处理
            this.ctx.save(); //防止跟别的应用公用一个画布时冲突

     this.hour();   //处理小时
     this.minute(); //处理分钟
     this.second(); //处理分钟
     this.number(); //绘出数字
     this.dotted(); //绘出点

     this.ctx.restore(); //防止跟别的应用公用一个画布时冲突
 },

 hour: function(){
     var ctx = this.ctx,
         h   = (this.hours * 5 + this.minutes / 12) * 6 *this.deg;

     ctx.save();              //保存当前环境的状态,防止冲突
     ctx.beginPath();         //起始一条路径
     ctx.rotate(h);           //按小时旋转当前绘图
     ctx.moveTo(4, 10);
     ctx.lineTo(0, -80);
     ctx.lineTo(-4, 10);
     ctx.fillStyle = '#000';
     ctx.fill();
     ctx.closePath();        //清除一条路径
     ctx.restore();          //返回之前保存过的路径状态和属性
 },

 minute: function(){
     var ctx = this.ctx,
         m   = (this.minutes + this.seconds / 60) * 6 * this.deg;

     ctx.save();
     ctx.beginPath();
     ctx.rotate(m);
     ctx.moveTo(3, 10);
     ctx.lineTo(0, -120);
     ctx.lineTo(-3, 10);
     ctx.fillStyle = '#000';
     ctx.fill();
     ctx.closePath();
     ctx.restore();
 },

 second: function(){
     var ctx = this.ctx,
         s   = this.seconds * 6 * this.deg;

     ctx.save();
     ctx.beginPath();
     ctx.rotate(s);
     ctx.moveTo(2, 10);
     ctx.lineTo(0, -150);
     ctx.lineTo(-2, 10);
     ctx.fillStyle = '#444';
     ctx.fill();
     ctx.closePath();
            ctx.restore();
 },

 number: function(){
     var ctx = this.ctx,
         deg = Math.PI / 180,
         i   = 1;

     ctx.save();
     ctx.font = '20px Arial';
     ctx.fillStyle = '#000';
     ctx.textAlign = 'center';
     ctx.textBaseline = 'middle';
     for(; i <= 12; i++) {
         var s = deg * i * 30,
                    x = Math.sin(s)*150,
                    y = -Math.cos(s)*150;
                ctx.fillText(i, x, y);
     }
     ctx.restore();
 },

 dotted: function(){
     var ctx = this.ctx,
         deg = Math.PI / 180,
         i   = 1;

     ctx.save();
     ctx.font = '20px Arial';
     ctx.fillStyle = '#000';
     ctx.textAlign = 'center';
     for(; i <= 60; i++) {
         var s = deg * i * 6,
             x = Math.sin(s)*150,
             y = -Math.cos(s)*150;
                if( i%5 !== 0 ){
             ctx.fillText('.', x, y);
                }
            }
            ctx.restore();
        }
}.init();

时间: 2024-10-31 21:22:19

一个简单的html5 canvas时钟例子的相关文章

如何开发一个简单的HTML5 Canvas 小游戏

原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wizard's Lizard这个游戏的半数以上开发是由我完成的) 我们直接来看源码里的game.js,当然你也可以在线体验一下游戏先. 游戏截图 创建画布 // Create the canvas var canvas = document.createElement("canvas"); v

用正则表达式判断一个简单的用户登陆的例子

正则 bd.jsp <%@ page contentType="text/html;charset=gb2312"%> <% //接受表单提交的字符串, /* 数据只能为a-z,A-Z,0-9的字符的正则表达式的例子. 正则表达式在做程序登陆的过程非常重要.不然用´ or ´ 等语句就可以很容易绕过您的程度判断: 作者:高颂 QQ:932246 一个简单的例子但是很有用,希望起到抛砖引玉的作用. */ String temp ="我是非法的字符";

一个简单的XML Schema的例子

xml 我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的.另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好

一个简单的XML Schema的例子_XML/RSS

我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的. 另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好处

一个简单的Spring MVC的例子

一.Spring MVC的优点 1.Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多.呵呵,当然这不是决定因素. 2.Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3.Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制. 二.简单的例子 1.配置web.xml 指除了Control层外

一个简单的网上书城的例子(一)!

数据库结构:第一个库shopbag.mdb,两个表:buyiformation表存客户信息如下:Name,Tel,Address,ProductID,Quatity,Sum第二个表products存商品信息:CategoryID(商品分类号),productid,productname,descrition,ischeck(用户是否选这一商品),price(单价) 下面试一个工具文件!util.asp <%Sub ListCategory( conn )    Set rs = conn.Exe

一个简单的网上书城的例子(一)

数据库结构:第一个库shopbag.mdb,两个表:buyiformation表存客户信息如下:Name,Tel,Address,ProductID,Quatity,Sum第二个表products存商品信息:CategoryID(商品分类号),productid,productname,descrition,ischeck(用户是否选这一商品),price(单价) 下面试一个工具文件!util.asp <%Sub ListCategory( conn )    Set rs = conn.Exe

JS实现的一个简单的Autocomplete自动完成例子_javascript技巧

分享一篇无意间发现的自动完成源码.这里测试的时候使用的是数组,实际使用的时候,我们换成Ajax从服务器端获取的方式就OK了. 提示:可以直接保存到一个html文件中查看效果. 复制代码 代码如下: <!doctype html><html><style>body {    margin-left: 0px;    margin-top: 0px;    margin-right: 0px;    margin-bottom: 0px;}.auto_hidden {   

一个简单的javascript类定义例子_js面向对象

复制代码 代码如下: <script> //定义一个javascript类 function JsClass(privateParam/* */,publicParam){//构造函数 var priMember = privateParam; //私有变量 this.pubMember = publicParam; //公共变量 //定义私有方法 function priMethod(){ return "priMethod()"; } //定义特权方法 //特权方法可以