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动画效果的兼容多浏览器简单导航条示例
Jan 26 HTML / CSS
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
Feb 10 HTML / CSS
css3实现文字扫光渐变动画效果的示例
Nov 07 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
Nov 10 HTML / CSS
HTML5实现表单自动验证功能实例代码
Jan 11 HTML / CSS
HTML5实践-图片设置成灰度图
Nov 12 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
Jan 01 HTML / CSS
Html5+JS实现手机摇一摇功能
Apr 24 HTML / CSS
HTML块级标签汇总(小篇)
Jul 13 HTML / CSS
HTML5 Canvas 旋转风车绘制
Aug 18 HTML / CSS
带你了解CSS基础知识,样式
Jul 21 HTML / CSS
HTML CSS 一个标签实现带动画的抖音LOGO
Apr 26 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中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
PHP加密解密函数详解
2015/10/28 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
python八皇后问题的解决方法
2018/09/27 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
python将数据插入数据库的代码分享
2020/08/16 Python
navabi英国:设计师大码女装
2019/06/25 全球购物
优秀员工评语
2014/02/10 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
给病人的慰问信
2015/03/23 职场文书
2016年社区服务活动总结
2016/04/06 职场文书