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 相关文章推荐
JavaScript对象模型-执行模型
Apr 28 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
Apr 20 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
使用原生JS实现弹出层特效
Dec 22 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
Dec 31 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
js获取本日、本周、本月的时间代码
Feb 01 Javascript
vue实现几秒后跳转新页面代码
Sep 09 Javascript
vue @click.native 绑定原生点击事件
Apr 22 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提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python简单实现enum功能的方法
2016/04/25 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
机电专业毕业生推荐信
2013/11/10 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
产品质量承诺书
2014/03/27 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
高中体育课教学反思
2016/02/16 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python