JavaScript html5 canvas绘制时钟效果


Posted in Javascript onMarch 01, 2016

本文实例讲述了JavaScript+html5 canvas绘制时钟效果。分享给大家供大家参考,具体如下:

 HTML部分:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
 <title>canvas绘图</title>
</head>
<body onload="init()">
<canvas id="canvas" width="200px" height="200px"></canvas>
</body>
</html>

JavaScript部分:

function init(){
 var canvas = document.getElementById("canvas"),
  context = canvas.getContext("2d");

 setInterval(function(){draw(canvas, context)},1000);
}
function draw(canvas, context){
 var x = canvas.width,
  y = canvas.height,
  r = Math.min(x/2, y/2);

 context.clearRect(0, 0, x, y); //清除绘画历史
 //绘画钟框
 context.fillStyle = "#f1f1f1";
 drawCircle(context, x, y, r);
 //绘画文字
 var tx = x/2,ty = y/2,tr = 0.8*r;
 context.font = "bold 12px 微软雅黑";
 context.fillStyle = "#000";
 drawText(context, "1", tx + 0.5*tr,ty - 0.866*tr);
 drawText(context, "2", tx + 0.866*tr, ty - 0.5*tr);
 drawText(context, "3", tx + tr, ty);
 drawText(context, "4", tx + 0.866*tr, ty + 0.5*tr);
 drawText(context, "5", tx + 0.5*tr, ty + 0.866*tr);
 drawText(context, "6", tx, ty + tr);
 drawText(context, "7", tx - 0.5*tr, ty + 0.866*tr);
 drawText(context, "8", tx - 0.866*tr, ty + 0.5*tr);
 drawText(context, "9", tx - tr, ty);
 drawText(context, "10", tx - 0.866*tr, ty - 0.5*tr);
 drawText(context, "11", tx - 0.5*tr, ty - 0.866*tr);
 drawText(context, "12", tx, ty - tr);
 //获取当前时间
 var date = new Date(),
  h = date.getHours(),
  m = date.getMinutes(),
  s = date.getSeconds(),
  angleH = (360/12)*Math.PI/180,
  angleM = (360/60)*Math.PI/180
 context.strokeSyle = "#000";
  //绘制时刻度
  drawScale(context, x, y, r, angleH, -0.88*r, -0.96*r, 3);
  //绘制分刻度
  drawScale(context, x, y, r, angleM, -0.93*r, -0.96*r, 1);
 //绘画时分秒针
 drawCircle(context, x, y, 3);
 drawNeedle(context, x, y, r, h*angleH + m*angleM/12, -0.5*r);
 drawNeedle(context, x, y, r, m*angleM + s*angleM/60, -0.6*r);
 drawNeedle(context, x, y, r, s*angleM, -0.75*r);

}
//绘画圆
function drawCircle(context, x, y, r){
 context.save();
 context.beginPath();
 context.arc(x/2, y/2, r, 0, Math.PI*2, 0);
 context.fill();
 context.closePath();
 context.restore();
}
//绘画文字方法
function drawText(context, text, x, y){
 context.save();
 x -= (context.measureText(text).width/2);
 y += 4;
 context.translate(x, y);
 context.fillText(text, 0, 0);
 context.restore();
}
//绘制刻度方法
function drawScale(context, x, y, r, rotate, start, end, lineWidth){
 context.save();
 context.beginPath();
 context.translate(x/2,y/2);
 context.lineWidth = lineWidth;
 for (var i = 0; i < 60; i++) { 
  context.rotate(rotate);
  context.moveTo(0, start); 
  context.lineTo(0, end);
 }
 context.closePath();
 context.stroke();
 context.restore();
}
//绘画时分秒针方法
function drawNeedle(context, x, y, r, rotate, line){
 context.save();
 context.translate(x/2,y/2);
 context.beginPath();
 context.rotate(rotate);
 context.moveTo(0, 0.1*r);
 context.lineTo(0, line);
 context.closePath();
 context.stroke();
 context.restore();
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
JS保存和删除cookie操作 判断cookie是否存在
Nov 13 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
JS常用表单验证方法总结
May 22 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
vue学习笔记之v-if和v-show的区别
Sep 20 Javascript
javaScript实现复选框全选反选事件详解
Nov 20 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 Javascript
javascript使用Promise对象实现异步编程
Mar 01 #Javascript
javascript html5实现表单验证
Mar 01 #Javascript
javascript中FOREACH数组方法使用示例
Mar 01 #Javascript
JS实现Select的option上下移动的方法
Mar 01 #Javascript
angular2使用简单介绍
Mar 01 #Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 #Javascript
Bootstrap每天必学之导航条(二)
Mar 01 #Javascript
You might like
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python多进程multiprocessing用法实例分析
2017/08/18 Python
深入浅析Python传值与传址
2018/07/10 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
详解python读取image
2019/04/03 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
关于幼儿的自我评价
2013/12/18 职场文书
《假如》教学反思
2014/04/17 职场文书
初三毕业评语
2014/12/26 职场文书
人代会简报
2015/07/21 职场文书