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 相关文章推荐
JavaScript 字符编码规则
May 04 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
Oct 17 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
Jan 03 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
js实现索引图片切换效果
Nov 21 Javascript
vue.js单页面应用实例的简单实现
Apr 10 Javascript
Vue2.0 vue-source jsonp 跨域请求
Aug 04 Javascript
Puppet的一些技巧
Sep 17 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 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
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
token 机制和实现方式
2020/12/15 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python中optparse模块使用浅析
2015/01/01 Python
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
python自定义异常实例详解
2017/07/11 Python
Python装饰器用法示例小结
2018/02/11 Python
python实现矩阵打印
2019/03/02 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
怎样声明接口
2014/09/19 面试题
写出一个方法实现冒泡排序
2016/07/08 面试题
护士自我鉴定范文
2013/10/06 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
班级文化建设标语
2014/06/23 职场文书
会计人员演讲稿
2014/09/11 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
搞笑结婚保证书
2015/05/08 职场文书
大学学生会辞职信
2015/05/13 职场文书
Python之基础函数案例详解
2021/08/30 Python
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL