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 相关文章推荐
jquery 上下滚动广告
Jun 17 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
Apr 26 Javascript
利用css+原生js制作简单的钟表
Apr 07 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
js+html5实现侧滑页面效果
Jul 15 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
微信小程序 网络通信实现详解
Jul 23 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批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
js获取Get值的方法
2016/09/29 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
基于python plotly交互式图表大全
2019/12/07 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
本科生的职业生涯规划范文
2014/01/09 职场文书
党校培训自我鉴定
2014/02/01 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
党员个人总结自评
2015/02/14 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
聊聊redis-dump工具安装问题
2022/01/18 Redis
python文件与路径操作神器 pathlib
2022/04/01 Python