最近学习了H5中的一个新标签canvas并且用它做出了一个时钟,最下面是成品图像,还不错吧,这只是我学习中的一个小demo,做得有点粗糙,但终究是做出来了,以后再写自己的网页主页再做一个好看点放上去。接下来我将和你们分享如何制作这个时钟。

在body中添加canvas标签:

<canvas id="myCanvas" width="600px" height="600px" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>

此处大小样式可以自行设置为图方便我就写在标签中了。

接下来就是javascript代码的书写了

window.onload = function(){
var myCanvas = document.getElementById("myCanvas");
if (!myCanvas.getContext)
{
alert("Your browser does not support the canvas element."); }
else
{......} }

window加载完之后,先get到canvas 然后通过getContext方法判断你的浏览器是否支持canvas

保证浏览器支持后再else中就开始画时钟了

var myContext = myCanvas.getContext("2d");  //指定二维绘图 可以把myContext看做是一个画笔

首先画出大圆盘

var deg = 2 * Math.PI / 12;
myContext.fillStyle="#0000ff";  //设置所围区域填充色
myContext.strokeStyle="gray";  //设置画的线的填充色 也就是最外面的一圈线
myContext.lineWidth=2;    //设置线的宽度
myContext.save();
myContext.beginPath();    //开始作图
myContext.translate(300,300);  //将原点移动到指定位置,这个位置就被看做是新的原点了
myContext.moveTo(0,-200);  //将画笔移动到指定位置,这里(300,300)是圆心所以我把它移动到圆的最上端开始画图
for(var i = 0 ; i < 13 ; i++){
var x = Math.sin(i * deg);
var y = Math.cos(i * deg);
myContext.lineTo( x * 200, - y * 200);
}
myContext.fill();   //调用fill进行填充颜色
myContext.stroke();  //调用stroke将线的颜色涂上
myContext.closePath();  //关闭画笔
myContext.restore();  //重置画笔

接下来是将数字画上去  上面注释过的就不再重复注释了

myContext.save();
myContext.beginPath();
myContext.translate(300,300);
for(var i =1 ;i < 13 ; i++){
var xl = Math.sin(i * deg);
var yl = Math.cos(i * deg);
myContext.fillStyle="#ffffff";
myContext.font="blod 20px Calibri";  //设置字体
myContext.textBaseline='middle';  //设置在绘制文本时的当前文本基线 middle文本基线是 em 方框的正中
myContext.fillText(i,xl * 180 -5 , - yl * 180 );  //第一个参数是所写的文本,后面两个是坐标
}
myContext.closePath();
myContext.restore();

画出大刻度盘

myContext.save();
myContext.beginPath();
myContext.translate(300,300);
for(var i = 0 ; i < 12 ; i++) {
var xo = Math.sin(i * deg);
var yo = Math.cos(i * deg);
myContext.moveTo( xo * 198 ,- yo * 198);
myContext.lineTo( xo * 187 , - yo * 187);
}
myContext.strokeStyle = "#ffffff";
myContext.lineWidth=4;
myContext.stroke();
myContext.closePath();
myContext.restore();

画出小刻度

var deg0 = 2 * Math.PI/60;
myContext.save();
myContext.beginPath();
myContext.translate(300,300);
for( var i = 0 ; i < 60 ; i++){
var xh = Math.sin(i * deg0);
var yh = Math.cos(i * deg0);
myContext.moveTo( xh * 194 , - yh * 194);
myContext.lineTo( xh * 187 , - yh * 187);
}
myContext.strokeStyle = "#ffffff";
myContext.lineWidth=2;
myContext.stroke();
myContext.closePath();
myContext.restore();

在中间添加文字,你可以随意添加任何你想要的文字

myContext.save();
myContext.font = '60px sans-serif';
myContext.textAlign = 'center';
myContext.textBaseline = "middle";
myContext.strokeText("canvas",300,400);
myContext.restore();

创建一个实时时间

 var time = new Date();
var h = (time.getHours() % 12) * 2 * Math.PI/12;
var m = time.getMinutes() * 2 * Math.PI/60;
var s = time.getSeconds() *2 * Math.PI/60;

接下来就是画上时针、分针、秒针了

秒针

 myContext.save();
myContext.beginPath();
myContext.translate(300,300);
myContext.rotate(s);
myContext.moveTo(0,0);
myContext.lineTo(0,-180);
myContext.strokeStyle = "#ffffff";
myContext.lineWidth = 2;
myContext.stroke();
myContext.closePath();
myContext.restore();

分针

myContext.save();
myContext.beginPath();
myContext.translate(300,300);
myContext.rotate( m + s /60);
myContext.moveTo(0,0);
myContext.lineTo(0,-150);
myContext.strokeStyle = "#ffffff";
myContext.lineWidth = 4;
myContext.stroke();
myContext.closePath();
myContext.restore();

时针

myContext.save();
myContext.beginPath();
myContext.translate(300,300);
myContext.rotate(h + m/60);
myContext.moveTo(0,0);
myContext.lineTo(0,-120);
myContext.strokeStyle = "#ffffff";
myContext.lineWidth = 6;
myContext.stroke();
myContext.closePath();
myContext.restore();

给中间加一个方块

myContext.save();
myContext.beginPath();
myContext.fillStyle="#ffffff";
myContext.fillRect(290,290,20,20);
myContext.closePath();
myContext.restore();

最后要让这个时钟自己转动起来

setTimeout(arguments.callee,1000);

好了,到这里就完成了,是不是感觉很简答,你还在等什么,赶快动手制作一个炫酷的时钟吧。

通过H5的新标签canvas做出一个时钟的全过程,希望对初学者有帮助的更多相关文章

  1. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  2. HTML5新标签<canvas>

    基本用法 首先在body中写个<canvas>,设定大小,个人建议大小要在行内设置,不然在部分情况下会发生错误. CSS部分 给canvas加个边框,这边框只是为了方便看出canvas的边 ...

  3. 用HTML5的canvas做一个时钟

    对于H5来说,canvas可以说是它最有特色的一个地方了,有了它之后我们可以随意的在网页上画各种各样的图形,做一些小游戏啊什么的.canvas这个标签的用法,在网上也有特别多的教程了,这里就不作介绍了 ...

  4. html5入门:教你用canvas写一个时钟

    今天的时间比较充裕,心血来潮,为大家分享一个html5的小例子,希望对刚学html5或者是没学html5正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...

  5. 用canvas绘制一个时钟

    实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...

  6. [原创]基于html5新标签canvas写的一个小画板

    最近刚学了canvas,写个小应用练习下 源代码 <!DOCTYPE> <html> <head> <meta http-equiv="Conten ...

  7. 使用canvas绘制一个时钟

    周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...

  8. 玩转html5(四)----使用canvas画一个时钟(可以动的哦!)

    先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <ht ...

  9. canvas画一个时钟

    效果图如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

随机推荐

  1. win10下python2与python3以及pip共存

    一 分别安装python2和python3 注意: 安装时记得勾选 Add Python.exe to Path 二 安装pip Python3最新版本有pip,无需安装 Python2: 下载pip ...

  2. [信息安全] 3.HTTPS工作流程

    [信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对 ...

  3. POJ 2566 尺取法(进阶题)

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4297   Accepted: 1351   Spe ...

  4. 【Unity游戏开发】SDK接入与集成——小白入门篇

    一.简介 通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感 ...

  5. 国内网站遭遇SYN攻击事如何及时解决问题

    1.SYN/ACK Flood攻击:这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服 务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗 尽或忙 ...

  6. springmvc精讲

    转自http://www.cnblogs.com/baiduligang/p/4247164.html

  7. Linux常用命令和常见问题解决<------>第一章

    查看文件下面所有的隐藏目录:ls -al ~ ls -al ~ls -a -l ~可以发现三条命令执行结果是一致的,原因:因为ls为命令 后面的参数要以空格来区分,不论几个空格 shell都会视为一体 ...

  8. 【分支结构】Jcc 的一些助记

    eax > ebx OF=0 SF=0 ZF=0 AF=0 PF=0 CF=0 eax = ebx OF=0 SF=0 ZF=1 AF=0 PF=1 CF=0 eax < ebx OF=0 ...

  9. OPNET中FIN,FOUT以及FRET的作用 分类: opnet 2014-05-12 16:07 144人阅读 评论(0) 收藏

    为了使一个用户定义的函数被执行,该函数必须与一个特殊的堆栈跟踪代码相连.堆栈跟踪技术靠在函数的入口点和出口点插入预处理器宏指令完成(一个函数只有一个入口点,但可以有多个出口点(由C语言的return声 ...

  10. nginx响应高并发参数配置

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...