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 相关文章推荐
查询json的数据结构的8种方式简介
Mar 10 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
用javascript实现自动输出网页文本
Jul 30 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
Bootstrap Chart组件使用教程
Apr 28 Javascript
js实现碰撞检测特效代码分享
Oct 16 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
jQuery表单元素选择器代码实例
Feb 06 Javascript
微信小程序中做用户登录与登录态维护的实现详解
May 17 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
js实现轮播图的完整代码
Oct 26 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
PHP对象相关知识总结
2017/04/09 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
JS 强制设为首页的代码
2009/01/31 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
python检测远程udp端口是否打开的方法
2015/03/14 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python实现数据库跨服务器迁移
2018/04/12 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
保安的辞职报告怎么写
2014/01/20 职场文书
对孩子的寄语
2014/04/09 职场文书
数学教研活动总结
2014/07/02 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
办公室主任岗位职责
2015/01/31 职场文书