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使用prototype定义对象类型(转)[
Dec 22 Javascript
使用JQUERY Tabs插件宿主IFRAMES
Jan 01 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 Javascript
javascript跨域请求包装函数与用法示例
Nov 03 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
vue cli 3.0 搭建项目的图文教程
May 17 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 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
PHP4之真OO
2006/10/09 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
python实现打砖块游戏
2020/02/25 Python
Python中如何引入第三方模块
2020/05/27 Python
Python 实现一个计时器
2020/07/28 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
代办委托书怎样写
2014/04/08 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
家属答谢词
2015/01/05 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
Python 绘制多因子柱状图
2022/05/11 Python