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 相关文章推荐
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
Nov 30 Javascript
正则表达式搭配js轻松处理json文本方便而老古
Feb 17 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
Dec 04 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
JQ实现新浪游戏首页幻灯片
Jul 29 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
el-select数据过多懒加载的解决(loadmore)
May 29 Javascript
javascript 原型与原型链的理解及实例分析
Nov 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判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
PyQt5组件读取参数的实例
2019/06/25 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
《乌塔》教学反思
2014/02/17 职场文书
集体生日活动方案
2014/08/18 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
2014公司年终工作总结
2014/12/19 职场文书
后勤个人工作总结
2015/02/28 职场文书
国情备忘录观后感
2015/06/04 职场文书