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 相关文章推荐
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
禁用Enter键表单自动提交实现代码
May 22 Javascript
JQuery动画与特效实例分析
Feb 02 Javascript
jquery使用经验小结
May 20 Javascript
使用AngularJS来实现HTML页面嵌套的方法
Jun 17 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
微信小程序canvas绘制圆角base64图片的实现
Aug 18 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
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
关于svn冲突的解决方法
2013/06/21 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
script标签属性用type还是language
2015/01/21 Javascript
JavaScript中的this机制
2016/01/30 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
react redux入门示例
2018/04/19 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
python中ConfigParse模块的用法
2014/09/29 Python
Python列表切片操作实例总结
2019/02/19 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
如何在django中添加日志功能
2020/02/06 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
详解Python 中的容器 collections
2020/08/17 Python
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
行政办公员自我评价分享
2013/12/14 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
求职信结尾怎么写
2014/05/26 职场文书
检讨书模板大全
2015/05/07 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js