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 相关文章推荐
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
Aug 05 Javascript
自己写的Javascript计算时间差函数
Oct 28 Javascript
JS显示表格内指定行html代码的方法
Mar 31 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
浅谈gulp创建完整的项目流程
Dec 20 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
微信小程序实现保存图片到相册功能
Nov 30 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 Javascript
Vue自定义全局弹窗组件操作
Aug 11 Javascript
JS获取当前时间戳方法解析
Aug 29 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/10/23 PHP
php生成短域名函数
2015/03/23 PHP
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
web.py在模板中输出美元符号的方法
2014/08/26 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
保险公司早会主持词
2014/03/22 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2014年班干部工作总结
2014/11/25 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS