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对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
jquery实现submit提交表单
Feb 03 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
js 中获取制定的cook信息实现方法
Nov 19 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
详解升级react-router 4 踩坑指南
Aug 14 Javascript
React应用中使用Bootstrap的方法
Aug 15 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 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/09/05 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Vue入门之animate过渡动画效果
2018/04/08 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Python实现图片拼接的代码
2018/07/02 Python
python解析xml简单示例
2019/06/21 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
python实现感知机模型的示例
2020/09/30 Python
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
市场部规章制度
2014/01/24 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
项目合作协议书范本
2014/04/16 职场文书
民政局个人整改措施
2014/09/24 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
幼儿园园长个人总结
2015/03/02 职场文书