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批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
基于KMP算法JavaScript的实现方法分析
May 03 Javascript
web css实现整站样式互相切换
Oct 29 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
javascript三元运算符用法实例
Apr 16 Javascript
js验证上传图片的方法
May 12 Javascript
javascript实现在指定元素中垂直水平居中
Sep 13 Javascript
js实现网页收藏功能
Dec 17 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 Javascript
Ant design vue中的联动选择取消操作
Oct 31 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
Python接口开发实现步骤详解
2020/04/26 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
骆驼官方商城:CAMEL
2016/11/22 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
软件工程师面试题
2012/06/25 面试题
副董事长岗位职责
2014/04/02 职场文书
我爱我家教学反思
2014/05/01 职场文书
安全生产演讲稿
2014/05/09 职场文书
大学生就业求职信
2014/06/12 职场文书
施工安全协议书范本
2014/09/26 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
三年级学生评语大全
2014/12/26 职场文书
明星邀请函
2015/02/02 职场文书