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 相关文章推荐
Prototype Object对象 学习
Jul 12 Javascript
JavaScript 创建对象
Jul 17 Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
js获取当前页面的url网址信息
Jun 12 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
js实现用户注册协议倒计时的方法
Jan 21 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
JS随机数产生代码分享
Feb 24 Javascript
JS文件中加载jquery.js的实例代码
May 05 jQuery
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 Javascript
vue中input的v-model清空操作
Sep 06 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
php字符串截取问题
2006/11/28 PHP
php addslashes 函数详细分析说明
2009/06/23 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
如何在PHP中生成随机数
2020/06/04 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
jQuery中detach()方法用法实例
2014/12/25 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
Vue指令指令大全
2019/02/09 Javascript
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
探究python中open函数的使用
2016/03/01 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
django框架模板语言使用方法详解
2019/07/18 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
普通大学毕业生自荐信范文
2014/02/23 职场文书
甲午大海战观后感
2015/06/02 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
Python基础之进程详解
2021/05/21 Python