canvas 绘制圆形时钟


Posted in Javascript onFebruary 22, 2017

效果如下:

canvas 绘制圆形时钟

代码如下:

<!DOCTYPE html>
<html>
 <head>
 <meta name="viewport" content="width=device-width,initial-scale=1"/>
 <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">
 var dom=document.getElementById("clock");
   var ctx=dom.getContext("2d");
var width=ctx.canvas.width;
var heigth=ctx.canvas.height;
var r=width/2;
//描绘时分秒小数和小数点
function drawBackground(){
 ctx.save();
 ctx.translate(r,r); //中心原点位置
 ctx.beginPath(); //起始位置
 ctx.lineWidth=10;
 //圆
 ctx.arc(0,0,r-5,0,2*Math.PI,false);
 ctx.stroke();
 var hourNumbers=[3,4,5,6,7,8,9,10,11,12,1,2];
 ctx.font="18px Arial";
 ctx.textAlign="center";
 ctx.textBaseline="middle";
 hourNumbers.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);
 ctx.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);
 ctx.beginPath();
 if(i%5===0){
 ctx.fillStyle="#000";
 ctx.arc(x,y,2,2*Math.PI,false);
 }else{
 ctx.fillStyle="#ccc";
 ctx.arc(x,y,2,2*Math.PI,false);
 }
 ctx.fill();
 }
}
//描绘时针
function drawHour(hour,minute){
 ctx.save();
 ctx.beginPath();
 var rad=2*Math.PI / 12 * hour;
 var mrad=2*Math.PI / 12 / 60 * minute;
 ctx.rotate(rad + mrad);
 ctx.lineWidth=6;
 ctx.lineCap="round";
 ctx.moveTo(0,10);
 ctx.lineTo(0,-r/2);
 ctx.stroke();
 ctx.restore();
}
//描绘分针
function drawMinute(minute){
 ctx.save();
 ctx.beginPath();
 var rad=2*Math.PI/60*minute;
 ctx.rotate(rad); 
 ctx.lineWidth=3;
 ctx.lineCap="round";
 ctx.moveTo(0,10);
 ctx.lineTo(0,-r+30);
 ctx.stroke();
 ctx.restore();
}
//描绘秒针
function drawSecond(second){
 ctx.save();
 ctx.beginPath();
 ctx.fillStyle="#C14543";
 var rad=2*Math.PI/60*second;
 ctx.rotate(rad);
 ctx.moveTo(-2,20);
 ctx.lineTo(2,20);
 ctx.lineTo(1,-r+18);
 ctx.lineTo(-1,-r+18)
 ctx.fill();
 ctx.restore(); 
}
//中间固定园点
function drawDot(){
 ctx.beginPath();
 ctx.fillStyle="#fff";
 ctx.arc(0,0,3,0,2*Math.PI,false);
 ctx.fill();
}
function draw(){
 ctx.clearRect(0,0,width,heigth);
 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();
 ctx.restore();
}
draw();
setInterval(draw,1000)
 </script>
 </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
js 解决“options为空或不是对象”
Dec 22 Javascript
jquery 3D球状导航的文章分类
Jul 06 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
Aug 02 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
JS.getTextContent(element,preformatted)使用介绍
Sep 21 Javascript
BootStrap中的表单大全
Sep 07 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
js 中rewrap-ajax.js插件实例代码
Oct 20 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
vue使用echarts实现折线图
Mar 21 Vue.js
jquery实现数字输入框
Feb 22 #Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 #Javascript
js实现无缝滚动图(可控制当前滚动的方向)
Feb 22 #Javascript
vuejs2.0实现一个简单的分页示例
Feb 22 #Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 #Javascript
js实现无缝滚动图
Feb 22 #Javascript
JavaScript实现二分查找实例代码
Feb 22 #Javascript
You might like
文件系统基本操作类
2006/11/23 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
js实现全选和全不选
2020/07/28 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
基于python实现删除指定文件类型
2020/07/21 Python
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
幼儿园教师工作感言
2014/02/15 职场文书
元旦获奖感言
2014/03/08 职场文书
求职简历自荐信
2014/06/18 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
组织生活会发言材料
2014/12/15 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
2016年公司新年寄语
2015/08/17 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电