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异步按一定的时间间隔刷新问题
Dec 10 Javascript
jquery通过visible来判断标签是否显示或隐藏
May 08 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
vue props 一次传多个值实例
Jul 22 Javascript
Vue实现简单的留言板
Oct 23 Javascript
node使用async_hooks模块进行请求追踪
Jan 28 Javascript
js作用域及作用域链工作引擎
Jul 07 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
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
详解vue中axios的封装
2018/07/18 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
Python实现的RSS阅读器实例
2015/07/25 Python
python多线程实现TCP服务端
2019/09/03 Python
Python实现ATM系统
2020/02/17 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
生产部厂长助理职位说明书
2014/03/03 职场文书
迎新晚会策划方案
2014/06/13 职场文书
会计学专业自荐信
2014/06/25 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
校车司机安全责任书
2015/05/11 职场文书
大学生村官入党自传
2015/06/26 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书