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之函数直接量(function(){})()
Jun 29 Javascript
面向对象的Javascript之一(初识Javascript)
Jan 20 Javascript
js获取事件源及触发该事件的对象
Oct 24 Javascript
asm.js使用示例代码
Nov 28 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
Vue和Bootstrap的整合思路详解
Jun 30 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
Sep 04 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 imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
virtualenv实现多个版本Python共存
2017/08/21 Python
Python读取word文本操作详解
2018/01/22 Python
Python实现基于POS算法的区块链
2018/08/07 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
党员四风剖析材料
2014/08/27 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
《去年的树》教学反思
2016/02/18 职场文书
python获取字符串中的email
2022/03/31 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python