canvas如何绘制钟表的方法


Posted in HTML / CSS onDecember 13, 2017

本文介绍了canvas如何绘制钟表的方法,分享给大家,具体如下:

效果图为

canvas如何绘制钟表的方法

上代码:

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var year,month,day,hour,second,minute;
// 绘制表盘
function drawClockPie(){
    ctx.beginPath();
    ctx.lineWidth = 2;
    ctx.strokeStyle = '#333';
    ctx.arc(150,150,146,0,2*Math.PI);
    ctx.stroke();
    ctx.closePath();
    ctx.beginPath();
    ctx.arc(150,150,6,0,2*Math.PI);
    ctx.fillStyle = 'red';
    ctx.fill();
    ctx.closePath();
}

// 绘制时刻度
function drawClockHours(){
    for(var i = 0,l = 12; i < 12; i++){
        ctx.save();
        ctx.translate(150,150);
        ctx.rotate(i*1/12*2*Math.PI);
        ctx.beginPath();
        ctx.lineWidth = 5;
        ctx.strokeStyle = '#333';
        ctx.moveTo(0,-140);
        ctx.lineTo(0,-125);
        ctx.stroke();
        ctx.closePath();
        ctx.restore();
    }
}

// 绘制分刻度
function drawClockMins(){
    for(var i = 0,l = 60; i < 60; i++){
        ctx.save();
        ctx.translate(150,150);
        ctx.rotate(i*1/60*2*Math.PI);
        ctx.beginPath();
        ctx.lineWidth = 3;
        ctx.strokeStyle = '#333';
        ctx.moveTo(0,-140);
        ctx.lineTo(0,-133);
        ctx.stroke();
        ctx.closePath();
        ctx.restore();
    }
}

// 绘制时针
function drawHourPin(){
    ctx.save();
    ctx.translate(150,150);
    ctx.rotate((hour*60*60+minute*60+second)/(12*60*60)*2*Math.PI);
    ctx.beginPath();
    ctx.strokeStyle = '#333';
    ctx.lineWidth = 3;
    ctx.moveTo(0,0);
    ctx.lineTo(0,-40);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
}

// 绘制分针
function drawMinPin(){
    ctx.save();
    ctx.translate(150,150);
    ctx.rotate((minute*60+second)/(60*60)*2*Math.PI);
    ctx.beginPath();
    ctx.strokeStyle = '#333';
    ctx.lineWidth = 2;
    ctx.moveTo(0,0);
    ctx.lineTo(0,-60);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
}

// 绘制秒针
function drawSecPin(){
    ctx.save();
    ctx.translate(150,150);
    ctx.rotate(second/60*2*Math.PI);
    ctx.beginPath();
    ctx.strokeStyle = 'red';
    ctx.lineWidth = 1;
    ctx.moveTo(0,0);
    ctx.lineTo(0,-80);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
}

// 绘制时间文字
function drawText(){
    hour = hour >= 12 ? hour - 12 : hour;
    var time = '现在是' + year + '年' + month +
    '月' + day + '日' + hour + '时' + minute +
    '分' + second + '秒';
    ctx.font = '15px 黑体';
    ctx.fillText(time,24,350);
}

// 获取时间
function getTimes(){
    var date = new Date();
    year = date.getFullYear();
    month = date.getMonth() + 1;
    day = date.getDate();
    hour = date.getHours();
    minute = date.getMinutes();
    second = date.getSeconds();
}
setInterval(function(){
    ctx.clearRect(0,0,600,600);
    drawClockPie();
    drawClockHours();
    drawClockMins();
    getTimes();
    drawText();
    drawHourPin();
    drawMinPin();
    drawSecPin();
},1000);

注:

当然时间也可以不用这样每隔一秒就获取,直接获取一次按秒递增就行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
css3弹性盒模型实例介绍
May 27 HTML / CSS
使用 CSS3 中@media 实现网页自适应的示例代码
Mar 24 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
May 28 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
Dec 13 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
Dec 15 HTML / CSS
Web前端页面跳转并取到值
Apr 24 HTML / CSS
html5 冒号分隔符对齐的实现
Jul 31 HTML / CSS
HTML5实现无刷新修改URL的方法
Nov 14 HTML / CSS
video实现有声音自动播放的实现方法
May 20 HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
Apr 24 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 HTML / CSS
Html5百叶窗效果的示例代码
Dec 11 #HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
Dec 11 #HTML / CSS
iphoneX 适配客户端H5页面的方法教程
Dec 08 #HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
Dec 07 #HTML / CSS
html5通过postMessage进行跨域通信的方法
Dec 04 #HTML / CSS
html5唤起app的方法
Nov 30 #HTML / CSS
Canvas与图片压缩的示例代码
Nov 28 #HTML / CSS
You might like
php后门URL的防范
2013/11/12 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
python实现通过shelve修改对象实例
2014/09/26 Python
python实时监控cpu小工具
2018/06/21 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
为什么是 Python -m
2020/06/19 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
大四学年自我鉴定
2013/11/13 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
推普标语口号大全
2015/12/26 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Python合并多张图片成PDF
2021/06/09 Python
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang