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 相关文章推荐
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
May 10 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
Feb 24 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
Javasript设计模式之链式调用详解
Apr 26 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
微信公众平台获取access_token的方法步骤
Mar 29 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 Javascript
浅谈vant组件Picker 选择器选单选问题
Nov 04 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 cron中的批处理
2008/09/16 PHP
php异常处理使用示例
2014/02/25 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
php跨服务器访问方法小结
2015/05/12 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
国外软件测试工程师面试题
2016/12/09 面试题
2014年社区庆元旦活动方案
2014/03/08 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
村安全生产责任书
2014/08/25 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
英语导游欢迎词
2015/09/30 职场文书