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 相关文章推荐
由document.body和document.documentElement想到的
Apr 13 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
Jun 14 Javascript
js中把JSON字符串转换成JSON对象最好的方法
Mar 21 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
Jun 21 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
在vue中解决提示警告 for循环报错的方法
Sep 28 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
javascript实现数字时钟效果
Feb 06 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调用三种数据库的方法(3)
2006/10/09 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
js实现分页功能
2017/05/24 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Python socket编程实例详解
2015/05/27 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python 显示数组全部元素的方法
2018/04/19 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
Python tkinter三种布局实例详解
2020/01/06 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
智乐游戏测试笔试题
2014/05/21 面试题
大学教师年终总结的自我评价
2013/10/29 职场文书
养殖人员的创业计划书范文
2013/12/26 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python