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写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
Feb 05 Javascript
JS模拟实现Select效果代码
Sep 24 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
vue cli2.0单页面title修改方法
Jun 07 Javascript
vue-router的两种模式的区别
May 30 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 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 动态添加记录
2009/03/10 PHP
php使用codebase生成随机数
2014/03/25 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
菜单效果
2006/10/14 Javascript
一个js实现的所谓的滑动门
2007/05/23 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python 多线程重启方法
2019/02/18 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
舞蹈比赛获奖感言
2014/02/04 职场文书
文明餐桌活动方案
2014/02/11 职场文书
广播体操比赛口号
2014/06/10 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis