javascript+HTML5 canvas绘制时钟功能示例


Posted in Javascript onMay 15, 2019

本文实例讲述了javascript+HTML5 canvas绘制时钟功能。分享给大家供大家参考,具体如下:

效果如下:

javascript+HTML5 canvas绘制时钟功能示例

代码:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>3water.com canvas绘制时钟</title>
 <style>
  div{text-align:center;margin-top:250px;}
 </style>
</head>
<body>
<div>
 <canvas id="clock" width="300px" height="300px"></canvas>
</div>
<script>
 var dom=document.getElementById("clock");
 var ctx=dom.getContext("2d");
 var width=ctx.canvas.width;
 var height=ctx.canvas.height;
 var r=width/2;
 var rem=width/200;
 function drawBackground(){
  ctx.save();
  ctx.translate(r,r);//重新定义圆点到中心
  ctx.beginPath();
  ctx.lineWidth=10*rem;
  ctx.arc(0,0,r-5*rem,0,Math.PI*2,false);//圆点坐标,起始角0,结束角2π,顺时针
  ctx.stroke();
  var hourNum=[3,4,5,6,7,8,9,10,11,12,1,2];//数组存小时数
  ctx.font="18px Arial";
  ctx.textAlign="center";
  ctx.textBaseline="middle";
  hourNum.forEach(function (num,i) {
   var rad=2*Math.PI/12*i;//弧度
   var x=(r-30*rem)*Math.cos(rad);
   var y=(r-30*rem)*Math.sin(rad);
   ctx.fillText(num,x,y);
  });
  for(var i=0;i<60;i++){//画圆点
   var rad=2*Math.PI/60*i;
   var x=(r-18*rem)*Math.cos(rad);
   var y=(r-18*rem)*Math.sin(rad);
   ctx.beginPath();
   if(i%5==0){
    ctx.fillStyle="#000";
    ctx.arc(x,y,2,0,Math.PI*2,false);
   }
   else{
    ctx.fillStyle="#ccc";
    ctx.arc(x,y,2,0,Math.PI*2,false);
   }
   ctx.fill();
  }
  ctx.closePath();
 }
 function drawHour(hour,minute){//时针
  ctx.save();
  ctx.beginPath();
  var rad=2*Math.PI/12*hour;
  var mrad=2*Math.PI/12/60*minute;
  ctx.rotate(rad+mrad);
  ctx.lineWidth=6*rem;
  ctx.moveTo(0,10*rem);
  ctx.lineTo(0,-r/2);
  ctx.lineCap="round";
  ctx.stroke();
  ctx.restore();
 }
 function drawMinute(minute,second){//分针
  ctx.save();
  ctx.beginPath();
  var rad=2*Math.PI/60*minute;
  var srad=2*Math.PI/60/60*second;
  ctx.rotate(rad+srad);
  ctx.lineWidth=3*rem;
  ctx.moveTo(0,10*rem);
  ctx.lineTo(0,-r+30*rem);
  ctx.lineCap="round";
  ctx.stroke();
  ctx.restore();
 }
 function drawSecond(second){//秒针
  ctx.save();
  ctx.beginPath();
  ctx.fillStyle="#c14543";
  var rad=2*Math.PI/60*second;
  ctx.rotate(rad);
  ctx.moveTo(-2*rem,20*rem);
  ctx.lineTo(2*rem,20*rem);
  ctx.lineTo(1*rem,-r+18*rem);
  ctx.lineTo(-1*rem,-r+18*rem);
  ctx.fill();
  ctx.restore();
 }
 function drawDot(){//画中心圆圈
  ctx.beginPath();
  ctx.fillStyle="#fff";
  ctx.arc(0,0,3*rem,0,2*Math.PI,false);
  ctx.fill();
 }
 function draw(){
  ctx.clearRect(0,0,width,height);
  var now=new Date();
  var hour=now.getHours();
  var minute=now.getMinutes();
  var second=now.getSeconds();
  drawBackground();//背景
  drawHour(hour,minute);//小时
  drawMinute(minute,second);//分钟
  drawSecond(second);//秒钟
  drawDot();//中心圆点
  ctx.restore();
 }
 setInterval(draw,1000);
</script>
</body>
</html>

其中的rem值是为了使canvas画布大小变化时时钟的样式能够保持

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

Javascript 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
基于Jquery的实现回车键Enter切换焦点
Sep 14 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
基于js实现checkbox批量选中操作
Nov 22 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 Javascript
解决Vue动态加载本地图片问题
Oct 09 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 Javascript
微信小程序实现电子签名功能
Jul 29 Javascript
手把手带你搭建一个node cli的方法示例
Aug 07 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
详解小程序用户登录状态检查与更新实例
May 15 #Javascript
基于vue如何发布一个npm包的方法步骤
May 15 #Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 #Javascript
JavaScript页面倒计时功能完整示例
May 15 #Javascript
vue组件间通信六种方式(总结篇)
May 15 #Javascript
JS正则表达式封装与使用操作示例
May 15 #Javascript
微信小程序实现授权登录
May 15 #Javascript
You might like
一个用php3编写的简单计数器
2006/10/09 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP7新增函数
2021/03/09 PHP
JavaScript的目的分析
2007/01/05 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
轮播的简单实现方法
2016/07/28 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
华为慧通笔试题
2016/04/22 面试题
大学本科毕业生求职信范文
2013/12/18 职场文书
批评与自我批评总结
2014/10/17 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python