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与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
JS往数组中添加项性能分析
Feb 25 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
Apr 12 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
微信小程序 如何引入外部字体库iconfont的图标
Jan 31 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 jQuery
小程序实现上下移动切换位置
Sep 23 Javascript
js实现录音上传功能
Nov 22 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 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
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
php可变长参数处理函数详解
2017/02/22 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
python读取Excel表格文件的方法
2019/09/02 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
sklearn的predict_proba使用说明
2020/06/28 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
土木工程师岗位职责
2013/11/24 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
初中军训感想300字
2014/03/05 职场文书
公司合并协议书范本
2014/09/30 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
高二化学教学反思
2016/02/22 职场文书
《司马光》教学反思
2016/02/22 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
python playwright之元素定位示例详解
2022/07/23 Python