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 相关文章推荐
js转义字符介绍
Nov 05 Javascript
JS继承用法实例分析
Feb 05 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
浅谈 JavaScript 沙箱Sandbox
Nov 02 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
thinkphp实现图片上传功能分享
2014/03/04 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
解决安装python库时windows error5 报错的问题
2018/10/21 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
python定义类self用法实例解析
2020/01/22 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python interpolate插值实例
2020/07/06 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
Ibatis如何调用存储过程
2015/05/15 面试题
会计专业个人求职信范文
2014/01/08 职场文书
产品销售计划书
2014/05/04 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Python实现照片卡通化
2021/12/06 Python