js Canvas绘制圆形时钟效果


Posted in Javascript onFebruary 17, 2017

本文实例为大家分享了js Canvas圆形时钟的具体实现代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Canvas Clock</title>
    <style type="text/css">

      div{
        text-align: center;
        margin-top: 250px;
      }
      #clock{

        border: 1px solid #ccc;
      }
    </style>
  </head>
  <body>
    <div>
      <canvas id="clock" height="200px" width="200px"></canvas>
    </div>

    <script type="text/javascript" src="js/clock.js"></script>
  </body>
</html>

js

var dom=document.getElementById('clock');
var cxt=dom.getContext("2d");
var width=cxt.canvas.width;
var height=cxt.canvas.height;
var r=width/2;

function drawBackground(){
  cxt.save();
  cxt.translate(r,r);
  cxt.beginPath();
  cxt.lineWidth=10;
  cxt.arc(0,0,r-5,0,2*Math.PI,false);
  cxt.stroke();
  cxt.font="18px Arial";
  cxt.textAlign='center'
  cxt.textBaseline='middle'
  var hourNums=[3,4,5,6,7,8,9,10,11,12,1,2];
  hourNums.forEach(function(number,i){

    var rad=2*Math.PI/12*i;
    var x=Math.cos(rad)*(r-30);
    var y=Math.sin(rad)*(r-30);
    cxt.fillText(number,x,y);

  });

  for(var i=0;i<60;i++){

    var rad=2*Math.PI/60*i;
    var x=Math.cos(rad)*(r-18);
    var y=Math.sin(rad)*(r-18);
    cxt.beginPath();
    if(i % 5===0){
      cxt.fillStyle="#000"
      cxt.arc(x,y,2,0,2*Math.PI,false);
    }
    else{
      cxt.fillStyle="#ccc"
      cxt.arc(x,y,2,0,2*Math.PI,false);
    }
    cxt.fill(); 
  }

}

function drawHour(hour,minute){
  cxt.save();
  cxt.beginPath();
  var rad=2*Math.PI/12*hour;
  var mrad=2*Math.PI/12/60*minute
  cxt.rotate(rad+mrad);
  cxt.lineWidth=6;
  cxt.lineCap='round'
  cxt.moveTo(0,10);
  cxt.lineTo(0,-r/2);
  cxt.stroke();
  cxt.restore();
}

function drawMinute(minute){
  cxt.save();
  cxt.beginPath();
  var rad=2*Math.PI/60*minute;
  cxt.rotate(rad);
  cxt.lineWidth=3;
  cxt.lineCap='round'
  cxt.moveTo(0,10);
  cxt.lineTo(0,-r+30);
  cxt.stroke();
  cxt.restore();
}

function drawSecond(second){
  cxt.save();
  cxt.beginPath();
  cxt.fillStyle='#c14543'
  var rad=2*Math.PI/60*second;
  cxt.rotate(rad);  
  cxt.moveTo(-2,20);
  cxt.lineTo(2,20);
  cxt.lineTo(1,-r+18);
  cxt.lineTo(-1,-r+18);
  cxt.fill();
  cxt.restore();
}

function drawDot(){

  cxt.beginPath();
  cxt.fillStyle='#fff'
  cxt.arc(0,0,3,0,2*Math.PI,false);
  cxt.fill();
}

function draw(){

  cxt.clearRect(0,0,width,height);
  var now=new Date();
  var hour=now.getHours();
  var minute=now.getMinutes();
  var second=now.getSeconds();
  drawBackground();
  drawHour(hour,minute);
  drawMinute(minute);
  drawSecond(second);
  drawDot();
  cxt.restore();
}
draw();
setInterval(draw,1000);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
jQuery实现可用于博客的动态滑动菜单
Mar 09 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
AngularJS 监听变量变化的实现方法
Oct 09 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
JavaScript实现单英文金山打字通
Jul 24 Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
Bootstrap风格的zTree右键菜单
Feb 17 #Javascript
js仿新浪微博消息发布功能
Feb 17 #Javascript
babel基本使用详解
Feb 17 #Javascript
JS及JQuery对Html内容编码,Html转义
Feb 17 #Javascript
canvas 实现中国象棋
Feb 17 #Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 #Javascript
js实现横向拖拽导航条功能
Feb 17 #Javascript
You might like
PHP 超链接 抓取实现代码
2009/06/29 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python实现泊松图像融合
2018/07/26 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
机械设计毕业生自荐信
2014/02/02 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
家装电话营销开场白
2015/05/29 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫