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中after的两种用法实例
Jul 03 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
js调出上下文菜单的实例
Dec 17 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
May 29 Javascript
JavaScript图像放大镜效果实现方法详解
Jun 28 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 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/06/20 PHP
关于php循环跳出的问题
2013/07/01 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
asp.net和php的区别点总结
2019/10/10 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
Python实现将文本生成二维码的方法示例
2017/07/18 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
预备党员党校学习自我评价分享
2013/11/12 职场文书
幼儿教师工作感言
2014/02/14 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
2015年女生节活动总结
2015/02/27 职场文书
文言文辞职信
2015/02/28 职场文书
失恋33天观后感
2015/06/11 职场文书
合作意向书范本
2019/04/17 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
Vue如何实现组件间通信
2021/05/15 Vue.js
SQL SERVER触发器详解
2022/02/24 SQL Server
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫