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 相关文章推荐
showModelessDialog()使用详解
Sep 21 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
基于Vue2的移动端开发环境搭建详解
Nov 03 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
Vue.use源码学习小结
Jun 20 Javascript
详解小程序如何避免多次点击,重复触发事件
Apr 08 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
php编写一个简单的路由类
2011/04/13 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
给护士表扬信
2014/01/19 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
python如何获取网络数据
2021/04/11 Python
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
python 三边测量定位的实现代码
2021/04/22 Python
基于Golang 高并发问题的解决方案
2021/05/08 Golang