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 相关文章推荐
JS、CSS加载中的小问题探讨
Nov 26 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
js获取 type=radio 值的方法
May 09 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
Mar 15 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
Jan 05 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
Sep 20 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 Javascript
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
PHP 单引号与双引号的区别
2009/11/24 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python基于递归解决背包问题详解
2019/07/03 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
大课间活动实施方案
2014/03/06 职场文书
禁烟标语大全
2014/06/11 职场文书
小学庆六一活动总结
2014/08/28 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
MySQL数据管理操作示例讲解
2022/12/24 MySQL