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 相关文章推荐
ie 调试javascript的工具
Apr 29 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
Apr 25 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
Dec 11 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
Dec 02 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
jquery获取url参数及url加参数的方法
Oct 26 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
基于React+Redux的SSR实现方法
Jul 03 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
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
php mssql 数据库分页SQL语句
2008/12/16 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
javascript 面向对象继承
2009/11/26 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
js中eval详解
2012/03/30 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python通过实例讲解反射机制
2019/10/17 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
巴基斯坦购物网站:Goto
2019/03/11 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
政协常委会议主持词
2015/07/03 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP