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实现图片翻书效果示例代码
Sep 09 Javascript
jquery三个关闭弹出层的小示例
Nov 05 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
Sep 28 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
Vue触发input选取文件点击事件操作
Aug 07 Javascript
vue实现简单的登录弹出框
Oct 26 Javascript
详解JS数组方法
Nov 20 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python多线程和队列操作实例
2015/06/21 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
党员党性分析材料
2014/02/17 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python