Canvas Clock

这两天在看html5的canvas,实现了上面那个东西

需要注意的地方:

1.canvas的sava()和restore()理解和使用

2.canvas的translate scale rotate ..的使用,每个变化都应该清楚圆心和角度..看:http://blog.sina.com.cn/s/blog_8fab526c01015tqs.html

3.自定义旋转transform方法,实现数字的fillText

View Code
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Canvas Clock.</title><script src="jquery-1.7.1.min.js"></script>
</head>
<style type="text/css">#canvasPanel{margin:0 auto;}#canvas{display: block;}
</style>
<body>    <div id="time"><span>2013-05-11</span></div><div id="canvasPanel"><canvas id="canvas" width="300" height="300" style="border:1px solid #ccc;"></canvas></div><script type="text/javascript">window.onload = function(){clock();var timeInterval = setInterval(clock,1000);};function clock(){var now = new Date();var weekday={0:'星期日',1:'星期一',2:'星期二',3:'星期三',4:'星期四',5:'星期五',6:'星期六'};var sec = now.getSeconds();var min = now.getMinutes();var hr  = now.getHours();hr = hr>=12 ? hr-12:hr;ctx = document.getElementById('canvas').getContext("2d");ctx.save();ctx.clearRect(0,0,300,300);ctx.translate(150,150);ctx.scale(0.4,0.4);ctx.rotate(-Math.PI/2);
ctx.strokeStyle = "black";ctx.lineWidth = 8;ctx.lineCap = "round";// 时间刻度
                ctx.save(); var x = 0, y = 0,angle = Math.PI/30;ctx.rotate(Math.PI/2);    //function transform ??function transform(ctx,x,y,angle,b){if(b){ctx.transform(Math.cos(angle), Math.sin(angle),-Math.sin(angle), Math.cos(angle),x*(1-Math.cos(angle)) + x*Math.sin(angle),y*(1-Math.cos(angle)) - y*Math.sin(angle));}}for(var i=0;i<60;i++){if(i%5 == 0){ctx.font = "26px Arial";ctx.fillText(i/5 == 0 ? 12 : i/5,x-15,y-200);}transform(ctx,x,y,angle,true); }ctx.restore();ctx.save();ctx.beginPath();for(var i=0;i<12;i++){ctx.rotate(Math.PI/6);ctx.moveTo(250,0);ctx.lineTo(270,0);}ctx.stroke();ctx.restore();ctx.save();ctx.lineWidth = 5;ctx.beginPath();for(var i=0;i<60;i++){if(i%5!=0){ctx.moveTo(266,0);ctx.lineTo(270,0);}ctx.rotate(Math.PI/30);
                    }    ctx.stroke();ctx.restore();//draw the hour line
                ctx.save();ctx.rotate((Math.PI/6)*hr+(Math.PI/360)*min+(Math.PI/21600)*sec);
                    ctx.beginPath();ctx.moveTo(-20,0);ctx.lineTo(150,0);ctx.stroke();ctx.restore();//draw the min line
                ctx.save();ctx.rotate((Math.PI/30)*hr+(Math.PI/1800)*min);ctx.strokeStyle = "#fd4000";ctx.fillStyle = "#fd4000";ctx.lineWidth = 6;ctx.beginPath();ctx.moveTo(-28,0);ctx.lineTo(200,0);ctx.stroke();ctx.restore();//draw the sec line
                ctx.save();ctx.rotate((Math.PI/30)*sec);ctx.strokeStyle = "#D40000";ctx.fillStyle = "#d40000";ctx.lineWidth = 6;ctx.beginPath();ctx.moveTo(-36,0);ctx.lineTo(160,0);ctx.stroke();ctx.restore();//draw the circle
                ctx.save();ctx.lineWidth = 4;ctx.strokeStyle = "325fa2"ctx.beginPath();ctx.arc(0,0,300,0,Math.PI*2,true);ctx.stroke();ctx.restore();//draw the middle circle
                ctx.save();ctx.lineWidth = 4;ctx.strokeStyle = "325fa2";ctx.beginPath();ctx.arc(0,0,7,0,Math.PI*2,true);ctx.stroke();ctx.restore();//show time/*ctx.rotate(Math.PI/2);ctx.lineWidth = 2;ctx.fillStyle = "red";hour = now.getHours();var str = hour > 10 ? hour : ("0"+hour)+":"+(min > 10 ? min:("0"+min));ctx.font = "18px";ctx.fillText(str,150,250);ctx.lineWidth = 1;  ctx.fillText("Lgm ZJ", 150, 270); */ctx.restore();var dateString=now.getFullYear()+"年"+(now.getMonth()+1)+"月"+now.getDate()+"日 "+weekday[now.getDay()]+" h:"+now.getHours()+" m:"+min+" s:"+sec;$("#time span").html(dateString);}</script>
</body></html>

 

 

转载于:https://www.cnblogs.com/lgmcolin/archive/2013/05/11/3073373.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 6.3 下用ntfs-3g挂载Windows NTFS分区

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;CentOS 6.3不支持Widows NTFS硬盘分区读写&#xff0c;要想把NTFS格式的磁盘挂载到CentOS 6.3下面需要安装第三方的插件ntfs-3g&#xff0c;这里我们采用编译安装插件。 1、安装编译器&#xff0c…

C++的const修饰

2019独角兽企业重金招聘Python工程师标准>>> C的const修饰 ‍const的两个用途‍ &#xff08;1&#xff09;可以定义 const 常量 &#xff08;2&#xff09;const 可以修饰函数的参数、返回值. const的好处 &#xff08;1&#xff09;便于进行类型检查&#xff0c;…

心率变异性 matlab,心率变异性好的功率谱分析方面的问题

本帖最后由 天路 于 2018-2-25 21:16 编辑本人正在学习心率变异性方面的内容&#xff0c;但是按照文献上的方法做出来的结果并不是很理想&#xff0c;文献上说的是心率变异性的频率的范围是0.4以内&#xff0c;但是我做的功率谱上显示频率分布在整个频域内&#xff0c;试了很多…

决策树php,决策树模型组合之随机森林与GBDT

前言&#xff1a;决策树这种算法有着很多良好的特性&#xff0c;比如说训练时间复杂度较低&#xff0c;预测的过程比较快速&#xff0c;模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时&#xff0c;单决策树又有一些不好的地方&#xff0c;比如说容易over-fitti…

关于uboot的简介——uboot的目录结构

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 不同版本的uboot&#xff0c;或者同一版本不同人员移植的uboot&#xff0c;目录结构和文件内容都会有所不同&#xff0c;也就是说&#xff0c;可以根据需要去添加、删除或者更改目录结构。在以三星的…

Photoshop绘制植物大战僵尸中的食人花

本人意见&#xff1a;我打算使用本文中的食人花形象作为我的一次讲课中的主要参考。我想说明的是&#xff0c;通过FLASH和PS都能够轻松地绘制出如本文所描述的食人花卡通效果。独立游戏开发者如果安排好时间&#xff0c;完全可以通过1-2个月掌握FLASH和PS绘制&#xff08;想精通…

uboot源码——uboot启动内核过程总结

总结的思维导图&#xff0c;其下载地址&#xff1a;Uboot启动.mmap_免费高速下载|百度网盘-分享无限制 第一阶段&#xff1a;汇编阶段&#xff0c;即start.S文件的工作。 第二阶段&#xff1a;C代码阶段&#xff0c;即start_armboot函数的工作。 值得一提的是&#xff0c;star…

虚拟化运行[OpenStack] VMWare产品介绍

最近使用开发的过程中出现了一个小问题&#xff0c;顺便记录一下原因和方法--虚拟化运行 世界上最早研制虚拟化软件的厂商之一。目前是是寰球桌面到数据中心虚拟化解决方案的引导厂商。中文名“威睿”&#xff0c;纽约证券交易所代码&#xff1a;VMW。总部设在加利福尼亚州的帕…

内核源码——kernel启动过程的思维导图

参考博客 内核源码——汇编阶段的head.S文件_天糊土的博客-CSDN博客___head汇编 内核源码——C语言阶段的start_kernel函数_天糊土的博客-CSDN博客_start_kernel 思维导图 kernel启动过程的思维导图下载地址&#xff1a;内核启动过程.mmap

oracle的等保,3.Oracle 检查(部分)

这是3级等保中oracle的检查方法&#xff0c;剩下的检查项可通过询问的方式进行检查。1.身份鉴别a.1 查看数据库用户select username,account_status from dba_users;b.1 检查用户的profileselect username,account_status,profile from dba_users;b.2 检查密码策略select profi…

Linux字符设备驱动剖析

以下内容整理于Linux字符设备驱动剖析&#xff0c;如有侵权请告知删除 。 一、应用层的程序 应用程序一般都是open打开设备文件&#xff0c;read、write、ioctl设备文件&#xff0c;最后close设备文件退出。 int main(int argc ,char *argv[]) { unsigned char val[1] 1; …

php处理form多文件上传,ajax利用FormData、FileReader实现多文件上传php获取

前台代码(注意&#xff0c;不需要用到form标签)&#xff1a;a. html部分&#xff1a;b. js部分&#xff1a;c. 完整代码&#xff1a;function loadDoc(file,data,asynctrue){if(window.XMLHttpRequest){ // code for IE7, Firefox, Chrome, Opera, Safarixmlhttpnew XMLHttpReq…

Linux设备文件的创建和mdev

以下内容源于微信公众号嵌入式企鹅圈&#xff0c;有格式内容上的修改&#xff0c;如有侵权请告知删除。 本文将从代码级去理解Linux设备类和设备文件的创建过程。 一、设备类相关知识 设备类是虚拟的&#xff0c;并没有直接对应的物理实物&#xff0c;只是为了更好地管理同一类…

JDK源码 - BitSet的实现

java.util.BitSet是个很有趣的类&#xff0c;了解其内部实现对正确的使用非常重要。 对象构造&#xff1a; Java代码 private final static int ADDRESS_BITS_PER_WORD 6; private final static int BITS_PER_WORD 1 << ADDRESS_BITS_PER_WORD; private long[] wor…

Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...

如果有这样一个需求&#xff1a;客户在一个SharePoint 2010的站点的document library中创建了不同的文件夹FolderA和FolderB&#xff0c;对于上传到此文件夹的文件记录中有某一个列ColumnM,现在他实现当上传文件到不同的文件夹FolderA或FolderB时&#xff0c;列ColumnM使用不同…

博客园的CSRF

CSRF全称 Cross Site Request Forgery&#xff0c;跨站请求伪造。通俗理解&#xff1a;攻击者盗用当前用户身份&#xff0c;发请当前用户的恶意请求&#xff1a;如邮件&#xff0c;银行转账等。 CSRF原理 CSRF过程 登录网站A&#xff0c;生成本地Cookie信息&#xff1b;登录危…

开发板——在X210开发板上进行裸机开发的细节

以下内容是学习裸机开发过程中的一些细节内容的记录。 1、汇编语言函数细节 用汇编写的函数&#xff0c;末尾应该添加mov pc,lr语句。 2、裸机代码相关文件 3、关于链接地址 4、关于重定位的理解 &#xff08;1&#xff09;在sram内部重定位 这是在sram内部重定位&#xff0c;因…

linux上perl怎么传输参数,如何在perl子函数中传递参数?

慕村225694Perl 可以通过函数元型在编译期进行有限的参数类型检验。如果你声明sub mypush ()那么 mypush() 对参数的处理就同内置的 push() 完全一样了。函数声明必须要在编译相应函数调用之前告知编译器(编译器在编译函数调用时会对相应函数用 prototype来查询它的元型来进行参…