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 写的一个简单的timer
Jul 30 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
浅析Vue 生命周期
Jun 21 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
Aug 29 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
使用layui实现树形结构的方法
Sep 20 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
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
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
python网页请求urllib2模块简单封装代码
2014/02/07 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python多线程抽象编程模型详解
2019/03/20 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Python 画出来六维图
2019/07/26 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
高中学生期末评语
2014/04/25 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
英语通知范文
2015/04/22 职场文书
刑事撤诉申请书
2015/05/18 职场文书
不同意离婚答辩状
2015/05/22 职场文书
独生子女证明范本
2015/06/19 职场文书
高温慰问简报
2015/07/21 职场文书