js Canvas绘制圆形时钟教程


Posted in Javascript onFebruary 06, 2017

本文实例为大家分享了Canvas绘制圆形时钟的具体代码,供大家参考,具体内容如下

<!DOCTYPE html> 
<html> 
<head lang="en"> 
  <meta charset="UTF-8"> 
  <title>canvas-clock</title> 
</head> 
<body> 
  <canvas id="canvas" width="500px" height="500px"> 
    你的浏览器不支持该元素!赶紧下载最新版本浏览器或使用其他浏览器! 
  </canvas> 
  <script> 
    //获取到canvas元素 
    var canvas = document.getElementById('canvas'); 
    //获取canvas中的画图环境 
    var context = canvas.getContext('2d'); 
 
 
    //时钟的大小 
    function drowClock(){ 
      //钟表的大小:初始值设置 
      var clockDimensions = 150; 
 
      //清理当前画布,以便后期绘制 
      context.clearRect(0,0,canvas.width,canvas.height); 
      //绘制表盘 
      context.beginPath(); //开启新路径 
      context.lineWidth = clockDimensions/15; 
      context.strokeStyle = "#A7C0DC"; 
      //绘制表盘圆圈 
      context.arc(canvas.width/2,canvas.height/2,clockDimensions,0,Math.PI*2,false); 
      context.stroke();//描边绘制 
 
      //绘制表盘的刻度线 
      for(var i=1;i<=60;i++){ 
        if(i%5==0){ 
          context.save();//保存当前绘制环境 
          context.beginPath(); 
          context.lineWidth =clockDimensions/30; 
          context.strokeStyle = "#9AABB1"; 
          //重置坐标原点(0,0) 
          context.translate(canvas.width/2,canvas.height/2); 
          //绘制环境旋转方法,以(0,0)为参考点进行旋转 
          context.rotate(Math.PI*2/60 * i); 
          context.moveTo(0,clockDimensions-clockDimensions/30); 
          context.lineTo(0,clockDimensions-clockDimensions/8); 
          context.stroke(); 
          context.beginPath(); 
          context.textAlign = 'center'; 
          context.textBaseline = 'middle'; 
          context.font = 'bold '+Math.floor(clockDimensions/10)+'px 宋体'; 
          context.fillStyle = "#03671F"; 
          context.fillText(i/5,0,0-(clockDimensions-clockDimensions/5)); 
          context.fill(); 
          context.restore();//恢复当前保存的绘制环境 
        }else { 
          context.save(); 
          context.beginPath(); 
          context.lineWidth = Math.floor(clockDimensions/100); 
          context.strokeStyle = "#8EA5AB"; 
          //重置坐标原点(0,0) 
          context.translate(canvas.width / 2, canvas.height / 2); 
          //绘制环境旋转方法,以(0,0)为参考点进行旋转 
          context.rotate(Math.PI * 2 / 60 * i); 
          context.moveTo(0, clockDimensions-clockDimensions/20); 
          context.lineTo(0, clockDimensions-clockDimensions/10); 
          context.stroke(); 
          context.restore(); 
        } 
      } 
 
      //获取当前windows的时间 
      var now = new Date(); 
      var sec = now.getSeconds(); 
      var min = now.getMinutes(); 
      var hour = now.getHours(); 
 
      //获取精准的小时数 
      hour = hour +min/60 + sec/3600; 
      //转换为12进制 
      hour = hour>12?(hour-12):hour; 
      //获取精准的分钟数 
      min = min + sec/60; 
 
      //绘制时针 
      context.save(); 
      context.beginPath(); 
      context.lineWidth = clockDimensions/30; 
      context.strokeStyle = "#596C74"; 
      //重置坐标原点(0,0) 
      context.translate(canvas.width / 2, canvas.height / 2); 
      //绘制环境旋转方法,以(0,0)为参考点进行旋转 
      context.rotate(Math.PI * 2 / 12 * hour); 
      context.moveTo(0, clockDimensions/10); 
      context.lineTo(0, 0-clockDimensions/2); 
      context.stroke(); 
      context.restore(); 
 
      //绘制分针 
      context.save(); 
      context.beginPath(); 
      context.lineWidth = clockDimensions/40; 
      context.strokeStyle = "#596C74"; 
      //重置坐标原点(0,0) 
      context.translate(canvas.width / 2, canvas.height / 2); 
      //绘制环境旋转方法,以(0,0)为参考点进行旋转 
      context.rotate(Math.PI * 2 / 60 * min); 
      context.moveTo(0, clockDimensions/8); 
      context.lineTo(0, 0-(clockDimensions-clockDimensions/5)); 
      context.stroke(); 
      context.restore(); 
 
      //绘制秒针 
      context.save(); 
      //重置坐标原点(0,0) 
      context.translate(canvas.width / 2, canvas.height / 2); 
      context.beginPath(); 
      context.lineWidth = clockDimensions/50; 
      context.strokeStyle = "#738B93"; 
      //绘制环境旋转方法,以(0,0)为参考点进行旋转 
      context.rotate(Math.PI * 2 / 60 * sec); 
      context.moveTo(0, clockDimensions/6); 
      context.lineTo(0, 0-(clockDimensions-clockDimensions/10)); 
      context.stroke(); 
      //修饰秒针 
      context.beginPath(); 
      context.arc(0,0-(clockDimensions-clockDimensions/3),clockDimensions/20,0,Math.PI*2,true); 
      context.fillStyle = "#2FFC14"; 
      context.fill(); 
      context.lineWidth = clockDimensions/50; 
      context.stroke(); 
      //修饰圆心 
      context.beginPath(); 
      context.fillStyle = "#738B93"; 
      context.arc(0,0,clockDimensions/20,0,Math.PI*2,true); 
      context.fill(); 
      context.restore(); 
    } 
    drowClock(); 
    setInterval(drowClock,1000); 
 
  </script> 
</body> 
</html>

效果图:

js Canvas绘制圆形时钟教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中==与===操作符的比较
Mar 21 Javascript
jQuery 使用手册(二)
Sep 23 Javascript
基于jquery的checkbox下拉框插件代码
Jun 25 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
Jan 27 Javascript
jQuery fadeOut 异步实例代码详解
Aug 18 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
vue 实现把路由单独分离出来
Aug 13 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 Javascript
JS中静态页面实现微信分享功能
Feb 06 #Javascript
JS日程管理插件FullCalendar中文说明文档
Feb 06 #Javascript
Javascript之深入浅出prototype
Feb 06 #Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 #Javascript
canvas实现图像布局填充功能
Feb 06 #Javascript
canvas实现图像截取功能
Feb 06 #Javascript
JS跨域请求外部服务器的资源
Feb 06 #Javascript
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
Ionic快速安装教程
2016/06/03 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
Python脚本处理空格的方法
2016/08/08 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
图解Python变量与赋值
2018/04/03 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
python多任务及返回值的处理方法
2019/01/22 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python求凸包及多边形面积教程
2020/04/12 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
大学旷课检讨书
2014/01/28 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
2016年情人节问候语
2015/11/11 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL