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学习之2D转换功能详解
Dec 23 HTML / CSS
CSS3+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
Jul 11 HTML / CSS
10 套华丽的CSS3 按钮小结
Oct 03 HTML / CSS
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
Feb 07 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
Nov 10 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
Jan 27 HTML / CSS
html5中 media(播放器)的api使用指南
Dec 26 HTML / CSS
使用phonegap播放音频的实现方法
Mar 31 HTML / CSS
HTML5播放实现rtmp流直播
Jun 16 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
Oct 28 HTML / CSS
浅谈为什么我的 z-index 又不生效了
Jul 15 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
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
js 函数调用模式小结
2011/12/26 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python3实现逐字输出的方法
2019/01/23 Python
如何给Python代码进行加密
2020/01/10 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python类class参数self原理解析
2020/11/19 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
深入理解go slice结构
2021/09/15 Golang