HTML5 Canvas绘制实时时钟

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>try to draw the colock</title>
 <script src="js/modernizr-1.7.js"></script>
 <script type="text/javascript">
  window.addEventListener("load",eventWindowLoaded,false);
  function eventWindowLoaded(){
    canvasApp();
  }
  function canvasSupport()   //检测浏览器是否支持canvas属性
  {
  	return Modernizr.canvas;
  }

  function canvasApp(){
  	if(!canvasSupport()){
  		return;
  	}else{
  		var theCanvas=document.getElementById("canvas");
  		var context=theCanvas.getContext('2d');  //获取2d上下文
  	}
   var clockRadius=50;     //时钟原型半径
   var clockImage=new Image();
   clockImage.addEventListener("load",eventCfaceLoaded,false);   //添加事件
   clockImage.src="images/cface.png";
   function eventCfaceLoaded(){
   	startUp();
   }

   function startUp(){
    setInterval(drawScreen,1000);   //设置一个定时器,进行画布的不断重绘
   }

  function clear() { // clear canvas function
      context.clearRect(0, 0, context.canvas.width, context.canvas.height);   //清除画布内容
  }
   function drawScreen()
   {
    clear();

    var date=new Date();
    var hours=date.getHours();
    var minutes=date.getMinutes();
    var seconds=date.getSeconds();
    hours=hours>12?hours-12:hours;
    var hour=hours+minutes/60;
    var minute=minutes+minutes/60;

    context.save();    //保存画布内容

    context.drawImage(clockImage,0,0,100,100);
    context.translate(theCanvas.width/2,theCanvas.height/2);
    context.beginPath();   //开始绘制

    //draw number
    context.fillStyle="#000";
    context.font="10px Arial";
    context.textAlign="center";
    context.textBaseline="middle";

    for(var n=1;n<=12;n++){
      var theta=(n-3)*(Math.PI*2)/12;  //绘制1-12数字的位置,自己结合坐标轴想想就知道为什么是n-3了
      var x=clockRadius*0.7*Math.cos(theta);
      var y=clockRadius*0.7*Math.sin(theta);
      context.fillText(n,x,y);  //绘制数字

    }
    context.save();  //保存画布内容

    var theta=(hour-3)*2*Math.PI/12;
     context.rotate(theta);
     context.beginPath();
     context.moveTo(-10,-3);
     context.lineTo(-10,3);
     context.lineTo(clockRadius*0.5,1);
     context.lineTo(clockRadius*0.5,-1);
     context.fill();
     context.restore();

     context.save();

     var theta=(minute-15)*Math.PI*2/60;
     context.rotate(theta);

     context.beginPath();
     context.moveTo(-10,-2);
     context.lineTo(-10,2);
     context.lineTo(clockRadius*0.7,1);
     context.lineTo(clockRadius*0.7,-1);
     context.fill();
     context.restore();

    context.save();
    var theta = (seconds - 15) * 2 * Math.PI / 60;
    context.rotate(theta);
    context.beginPath();
    context.moveTo(-10, -2);
    context.lineTo(-10, 2);
    context.lineTo(clockRadius * 0.8, 1);
    context.lineTo(clockRadius * 0.8, -1);
    context.fillStyle = '#0f0';
    context.fill();
    context.restore();

    context.restore();

   }
}

 </script>
 <style type="text/css">
 body{margin: 0px;padding: 0px;background-color: #eee;font-size: 4px Arial,sans-serif;}
 .clocks{height: 100px;width: 100px;margin: 25px auto;}
 </style>
</head>
<body>
	<div class="clocks" style="position:absolute;top:50px;left:50px;">
		<canvas id="canvas" width="100" height="100" >
			your broswer is not support HTML5!
		</canvas>
	</div>
</body>
</html>

补充说明:

save是保存当前绘图状态,并把它压入一个堆栈

restore是恢复上次保存的绘图状态,从堆栈弹出。

关键在于绘图状态,它是指Canvas的平移、放缩、旋转、错切、裁剪等操作或者颜色、线条等样式。

beginPath()和closePath()也就是绘制线的开始和结束

HTML5 Canvas绘制实时时钟

时间: 2024-10-25 05:47:35

HTML5 Canvas绘制实时时钟的相关文章

使用html5 canvas绘制圆形或弧线

注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链接以了解使用html5 canvas绘制图形的完整内容. 在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍: arc(x, y, radius, startRad, endRad, anticlockwise) 在canvas画

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

Html5 canvas 绘制彩票走势图

因需要 要实现一个类似彩票走势图的功能,初次学Html5 ,很多地方不明白,前段时间也发帖请教过这个问题,也是没给个明确说话,在网上搜了很多,也没有实现的例子,今天仔细研究了下,发现其实也不是很难,现将代码贴出来,共同学习! 先来一张效果图: 实现的代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <me

使用 HTML5 Canvas 绘制出惊艳的水滴效果

HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作,具有极大的应用价值. 这里分享一个惊艳的 Canvas 水滴效果,双击可以把水滴分离:拖放到一起可以融合:晃动浏览器可以让水滴跳动:键盘左右键可以切换皮肤:上下键可以变换大小. 在线演示      插件下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊

h5+canvas绘制动画时钟

h5+canvas绘制动画时钟 效果图,这个是截图,可以动的, 代码如下: <!DOCTYPE html><html><head><title>动画效果</title></head> <body> <canvas id="anm" width="600" height="600" style="border:1px solid gray"

学习笔记:HTML5 Canvas绘制简单图形

HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" width="1024" style="border:1px solid #aaa;text-align:center;"> 你的浏览器不支持Canvas,请更新浏览器再试!!! </canvas> 在canvas标签之间应该做浏览器是否支持的检测,

使用html5 Canvas绘制线条(直线、折线等)

使用html5 Canvas绘制直线所需的CanvasRenderingContext2D对象的主要属性和方法(有"()"者为方法)如下: 属性或方法 基本描述 strokeStyle 用于设置画笔绘制路径的颜色.渐变和模式.该属性的值可以是一个表示css颜色值的字符串.如果你的绘制需求比较复杂,该属性的值还可以是一个CanvasGradient对象或者CanvasPattern对象 globalAlpha 定义绘制内容的透明度,取值在0.0(完全透明)和1.0(完全不透明)之间,默认

HTML5 Canvas 绘制时钟

网上会看到很多绘制的时钟,看代码也是云里雾里,自学了下Canvas,觉得不难,就自己做了一个. 先看一下截图: 比较简陋,但是该有的都有了,样式只加了个阴影. html代码就不贴了,就一个canvas. <canvas id="clock" width="300" height="300"></canvas> 下面是JS实现: 1.取得上下文: var clock = document.getElementById('cl

HTML5 canvas 绘制精美的图形

HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HTML 4.01 版本规范.它还引入了几个新元素和属性,它们适用许多使用 web 页面的领域 — 音频.视频.图形.数据存储.内容呈现,等等.本文主要关注图形方面的增强:canvas. 新的 HTML5 canvas 是一个原生 HTML 绘图簿,用于 JavaScript 代码,不使用第三方工具.跨