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 相关文章推荐
一个tab标签切换效果代码
Mar 27 Javascript
Dom 学习总结以及实例的使用介绍
Apr 24 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
Bootstrap 网格系统布局详解
Mar 19 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
vue.js的简单自动求和计算实例
Nov 08 Javascript
javascript实现鼠标点击生成文字特效
Dec 24 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
聊天室php&amp;mysql(二)
2006/10/09 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python中的字典操作及字典函数
2018/01/03 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python入门教程 python入门神图一张
2018/03/05 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
Java基础面试题
2012/11/02 面试题
招商专员岗位职责
2014/02/08 职场文书
违纪检讨书2000字
2014/02/08 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
最感人的道歉情书
2015/05/12 职场文书
房屋维修申请报告
2015/05/18 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
Java Socket实现多人聊天系统
2021/07/15 Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS