HTML5之Canvas时钟(网页效果--每日一更)

  今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果。

  话不多说,先看效果:http://webfront.verynet.cc/pc/canvas-clock.html

  众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由JavaScript控制的即时模式位图区域。即时模式是指在画布上呈现像素的方式,

  HTML5 Canvas通过JavaScript调用CanvasAPI,在每一帧完全重绘屏幕上的位图。详细将在下面代码进行说明。

  HTML结构代码:

1     <canvas id="canvas" width="500" height="500">
2         您的浏览器不支持Canavas标签,请升级浏览器再查看此页面!
3     </canvas>

  CSS样式代码:

1     <style type="text/css">
2         *{margin:0px;padding:0px;}
3         .canvasbox{margin:50px auto;background:#dadada;width:500px;}
4     </style>

  JS脚本代码:

  1 <script type="text/javascript">
  2         var canvas = document.getElementById("canvas");
  3         //获取Canvas的2d上下文对象
  4         var context = canvas.getContext("2d");
  5
  6         //定义一个初始化函数
  7         function init(){
  8             //先清除画布上的所有图像
  9             context.clearRect(0,0,500,500);
 10
 11             //获取系统时间
 12             var date = new Date();
 13             var hours = date.getHours();
 14             //因为钟表是12小时制,所以必须对时刻度进行控制
 15             hours = hours > 12 ? hours-12 : hours;
 16             var minutes = date.getMinutes();
 17             var seconds = date.getSeconds();
 18
 19             //开始画表盘
 20             context.beginPath();
 21             //在画布中心250,250点上画一个圆
 22             context.arc(250,250,200,0,360,false);
 23             //定义画笔的宽度
 24             context.lineWidth = 10;
 25             //定义画笔颜色
 26             context.strokeStyle = "#000";
 27             //关闭绘画路径
 28             context.closePath();
 29             //上色
 30             context.stroke();
 31
 32             //开始画刻度
 33             //时刻度
 34             for(var h = 0;h < 12;h++){
 35                 //先将图像进行保存
 36                 context.save();
 37                 context.lineWidth = 8;
 38                 context.strokeStyle = "#f00";
 39                 //定义旋转中心点
 40                 context.translate(250,250);
 41                 //定义旋转角度
 42                 context.rotate(h*30*Math.PI/180);
 43                 context.beginPath();
 44                 context.moveTo(0,190);
 45                 context.lineTo(0,170);
 46                 context.closePath();
 47                 context.stroke();
 48                 //将之前的保存的图像显示,形成新的图像
 49                 context.restore();
 50             }
 51             //分刻度
 52             for(var m = 0;m < 60;m++){
 53                 context.save();
 54                 context.lineWidth = 4;
 55                 context.strokeStyle = "red";
 56                 context.translate(250, 250);
 57                 context.rotate(m*6*Math.PI/180);
 58                 context.beginPath();
 59                 context.moveTo(0, 190);
 60                 context.lineTo(0, 180);
 61                 context.closePath();
 62                 context.stroke();
 63                 context.restore();
 64             }
 65
 66             //画时针
 67             context.save();
 68             context.lineWidth = 8;
 69             context.strokeStyle = "#000";
 70             context.translate(250,250);
 71             context.rotate(hours*30*Math.PI/180);
 72             context.beginPath();
 73             context.moveTo(0,10);
 74             context.lineTo(0,-100);
 75             context.closePath();
 76             context.stroke();
 77             context.restore();
 78
 79             //画分针
 80             context.save();
 81             context.lineWidth = 4;
 82             context.strokeStyle = "#000";
 83             context.translate(250,250);
 84             context.rotate(minutes*6*Math.PI/180);
 85             context.beginPath();
 86             context.moveTo(0,10);
 87             context.lineTo(0,-140);
 88             context.closePath();
 89             context.stroke();
 90             context.restore();
 91
 92             //画秒针
 93             context.save();
 94             context.lineWidth = 2;
 95             context.strokeStyle = "blue";
 96             context.translate(250,250);
 97             context.rotate(seconds*6*Math.PI/180);
 98             context.beginPath();
 99             context.moveTo(0,10);
100             context.lineTo(0,-170);
101             context.closePath();
102             context.stroke();
103             context.restore();
104         }
105         //调用定时器,在每秒刷新重绘新图像
106         setInterval(init,1000);
107     </script>

  其中,蕴含着一个小BUG。在绘画时刻度和分刻度时,若颜色不一时,会出现重叠现象,因为在绘画时刻度后,再进行绘画分刻度,故小编将两刻度颜色设置为一致,避免该现象产生。当然,也可以通过判断去进行处理,小编就不在此进行处理。

  在浏览该效果时,请使用支持HTML5的浏览器,以免影响浏览效果。

  享受代码,享受生活,网页效果,每日一更。

时间: 2024-10-09 12:41:53

HTML5之Canvas时钟(网页效果--每日一更)的相关文章

CSS3之图片3D翻转效果(网页效果--每日一更)

今天,带来的是纯CSS3的效果--图片3D翻转. 请看效果:http://localhost:63342/webfront/PC/rotate.html 这个效果主要还是运用了CSS3的transform变形属性,与上个效果不同的是,这次并不是动画,所以没有采用animation属性,而是采用transition过渡属性.这个属性会将元素在两种效果之间进行切换,并产生一个过渡效果.详情请看代码. HTML结构: 1 <div id="content"> 2 <div

CSS3之绽放的花朵(网页效果--每日一更)

今天,带来的是纯CSS3打造的效果--绽放的花朵. 先来看效果吧:http://webfront.verynet.cc/pc/flower.html 这是纯CSS3样式打造的效果,关键是采用了animation属性和transform属性.详细请看下面代码. HTML结构: 1 <div class="div1"></div> 2 <div class="div2"></div> 3 <div class=&qu

JQuery图片轮播滚动效果(网页效果--每日一更)

今天,带来的是一个图片的轮播滚动效果! 先来看一下效果展示:http://webfront.verynet.cc/pc/index.html 原理很简单,设置一个定时器,使图片列表在每隔一段时间后滚动一次.而循环效果,就是在每一滚动的时候,将第一张图片放到最后一张的后面,详细请看代码. HTML结构代码如下: 1 <div class="content"> 2 <div class="box"> 3 /*滚动的盒子*/ 4 <ul id

【HTML5】Canvas 实现放大镜效果

目录 图片放大镜 效果 原理 初始化 画背景图片 计算图片被放大的区域的范围 绘制放大镜区域 添加鼠标事件 图表放大镜 原理 绘制原始线段 计算原始区域和放大镜区域 计算线段在新坐标系统的位置 绘制放大镜中心点 绘制放大镜 添加事件 图片放大镜 效果 在线演示    源码 原理 首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上,保证两块区域的中心点一致, 如下图所示: 初始化 <canvas id="canvas" width="500"

HTML5在canvas中绘制复杂形状附效果截图

HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路径. closePath() : 通过绘制一条当前点到路径起点的线段来闭合形状. fill() , stroke() : 填充形状或绘制空心形状. moveTo() : 将当前点移动到点(x,y). lineTo() : 从当前点绘制一条直线到点(x,y). arc(x,y,r,sAngle,eAn

html5制作一个时钟

试着用html5写一个时钟 记得开始这个随笔是几天前,一直保存在草稿里面,一直感觉有个东西搁在在那里,所以今天熬夜也要写完这篇博客!!!哈哈...不多说来上代码和思路. --------------------------------------------------------------------------------------------- 其实并不难,主要看你是否掌握了canvas下面几个属性:save(),restore();ratate();translate(),moveT

HTML5夜空烟花绽放动画效果

模板描述:HTML5夜空烟花绽放动画效果基于HTML5 canvas制作,模拟夜空烟花绽放动画效果,烟花会在夜空打出贺词,有新年快乐.合家幸福.万事如意.心想事成.财源广进等,文字可以自定义,做成各种祝福网页. 找网站SEO教程,网站模板,以及想要建立个人博客的朋友来涂志海个人博客网,这里有你想要的一切(万一没有的,请联系涂志海,再解决,嘿嘿) 下 载 演示地址 下载说明: 1.解压密码:tuzhihai.com 2.只有部分模板会提供多页面下载,未加说明都是只有一个首页index.html模板

HTML5程序设计 Canvas API

检测浏览器支持情况 <script type="text/javascript"> try { document.createElement("Canvas").getContext("2d"); document.getElementById("support").innerHTML = "OK"; } catch (e) { document.getElementById("sup

HTML5 画布 Canvas

利用html5的canvas元素使用 JavaScript 在网页上绘制图像. 通过规定尺寸.颜色和位置,来绘制一个圆: <!DOCTYPE htma> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #3CF;"> Your browser does not