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 相关文章推荐
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
May 11 Javascript
jQuery焦点图插件SaySlide
Dec 21 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
chrome浏览器如何断点调试异步加载的JS
Sep 05 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
JQuery常见节点操作实例分析
May 15 jQuery
js实现移动端tab切换时下划线滑动效果
Sep 08 Javascript
浅谈vue异步数据影响页面渲染
Oct 29 Javascript
Ajax实现异步加载数据
Nov 17 Javascript
vue修饰符.capture和.self的区别
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应用JSON技巧讲解
2013/02/03 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python打包成so文件过程解析
2019/09/28 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
学生安全教育材料
2014/02/14 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
高中校园广播稿
2014/10/21 职场文书
社区活动总结
2015/02/04 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang