基于canvas实现钟表
原理说明
1、通过arc方法实现钟表外环;
2、通过line实现钟表时针,分针,秒针和刻度标志的绘制,基于save和restore方法旋转画布绘制不同角度的指针;
3、通过font方法实现在画布上绘制文字,基于save和restore方法旋转绘制的文字,使文字正向显示。
实例效果图如下

绘制钟表圆形边框方法,centerX表示圆中心点x坐标,centerY表示圆中心店y坐标
function drawClockBall (centerX,centerY) {
ctx.strokeStyle = centerBallColor;
ctx.lineWidth = centerBallRange;
ctx.beginPath();
ctx.arc(centerX,centerY,centerBallRadius + centerBallRange / 2,0,2 * Math.PI);
ctx.closePath();
ctx.stroke();
ctx.strokeStyle = outerBallColor;
ctx.lineWidth = outerBallRange;
ctx.beginPath();
ctx.arc(centerX,centerY,centerBallRadius + centerBallRange + outerBallRange / 2,0,2 * Math.PI);
ctx.closePath();
ctx.stroke();
ctx.strokeStyle = centerBallColor;
ctx.lineWidth = outerLineWidth;
ctx.beginPath();
ctx.arc(centerX,centerY,centerBallRadius + centerBallRange + outerBallRange,0,2 * Math.PI);
ctx.closePath();
ctx.stroke();
}
绘制3,6,9,12时刻刻度和文字方法,rotate表示图形旋转角度,centerX表示图形绘制中心点x坐标,centerY表示图形绘制中心店y坐标
function drawClockSpecialMark(rotate,centerX,centerY){
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate(rotate * Math.PI / 180)
ctx.fillStyle = clockMarkColor;
ctx.beginPath();
ctx.arc(0,-centerBallRadius + clockMarkWidth * 2,clockMarkCircleRadius,0,2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.translate(0,-centerBallRadius + clockMarkWidth * 3 + fontSize);
ctx.rotate(-rotate * Math.PI / 180)
ctx.font = fontSize + 'px bold 黑体';
ctx.fillStyle = fontColor;
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(parseInt(rotate / 30), 0, 0);
ctx.restore();
}
绘制非3,6,9,12时刻刻度和文字方法,rotate表示图形旋转角度,lineWidth表示刻度线条宽度,range表示刻度之间的差值,centerX表示图形绘制中心点x坐标,centerY表示图形绘制中心店y坐标
function drawClockIntMark(rotate,lineWidth,range,centerX,centerY) {
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate(rotate * Math.PI / 180)
ctx.strokeStyle = clockMarkColor;
ctx.lineWidth = lineWidth;
ctx.beginPath();
ctx.moveTo(0,-centerBallRadius + clockMarkWidth);
ctx.lineTo(0,-centerBallRadius + clockMarkWidth * 3 - range);
ctx.stroke();
if (rotate % 30 == 0) {
ctx.translate(0,-centerBallRadius + clockMarkWidth * 3 + fontSize);
ctx.rotate(-rotate * Math.PI / 180)
ctx.font = fontSize + 'px bold 黑体';
ctx.fillStyle = fontColor;
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(parseInt(rotate / 30), 0, 0);
}
ctx.restore();
}
绘制时钟时针,分针,秒针方法,centerX表示圆中心点x坐标,centerY表示圆中心店y坐标
function drawIndicatorFun(centerX,centerY) {
var newDate = new Date();
var currentHour = newDate.getHours();
var currentMinute = newDate.getMinutes();
var currentSecond = newDate.getSeconds();
ctx.fillStyle = indicatorColor;
ctx.beginPath();
ctx.arc(centerX,centerY,indicatorBallRadius,0,2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.fillStyle = '#fff';
ctx.beginPath();
ctx.arc(centerX,centerY,indicatorBallRadius - 3,0,2 * Math.PI);
ctx.closePath();
ctx.fill();
// 时针
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate((currentHour * 30 + currentMinute / 60 * 30) * Math.PI / 180)
ctx.strokeStyle = indicatorColor;
ctx.lineWidth = 3;
ctx.beginPath();
ctx.moveTo(0,25)
ctx.lineTo(0,-centerBallRadius + clockMarkWidth * 12,clockMarkCircleRadius)
ctx.stroke();
ctx.restore();
// 分针
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate((currentMinute * 6 + currentSecond / 60 * 6) * Math.PI / 180)
ctx.strokeStyle = indicatorColor;
ctx.lineWidth = 3;
ctx.beginPath();
ctx.moveTo(0,25)
ctx.lineTo(0,-centerBallRadius + clockMarkWidth * 3,clockMarkCircleRadius)
ctx.stroke();
ctx.restore();
// 秒针
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate((currentSecond * 6) * Math.PI / 180)
ctx.strokeStyle = indicatorSecondColor;
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(0,25)
ctx.lineTo(0,-centerBallRadius + clockMarkWidth * 3,clockMarkCircleRadius)
ctx.stroke();
ctx.restore();
}
实例预览地址:基于canvas实现钟表
后话
希望上述讲解对您有帮助!!!
基于canvas实现钟表的更多相关文章
- Particles.js基于Canvas画布创建粒子原子颗粒效果
文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫 ...
- 基于canvas的二维码邀请函生成插件
去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...
- 7个华丽的基于Canvas的HTML5动画
说起HTML5,可能让你印象更深的是其基于Canvas的动画特效,虽然Canvas在HTML5中的应用并不全都是动画制作,但其动画效果确实让人震惊.本文收集了7个最让人难忘的HTML5 Canvas动 ...
- 微信小程序-基于canvas画画涂鸦
代码地址如下:http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 基于canvas的仪表盘效果
概述 基于Canvas实现的仪表盘及效果.通过配置参数,可以任意修改仪表盘颜色,刻度,动画过渡时间等,满足不同场景下的使用.同时使用原生的Canvas,也是学习Canvas的很好的例子. 详细 代码下 ...
- canvas画画板,canvas画五角星,canvas制作钟表、Konva写钟表
制作一个画画板,有清屏有橡皮擦有画笔可以换颜色 style样式 <head> <meta charset="UTF-8"> <title>画画板 ...
- 基于canvas二次贝塞尔曲线绘制鲜花
canvas中二次贝塞尔曲线参数说明: cp1x:控制点1横坐标 cp1y:控制点1纵坐标 x: 结束点1横坐标 y:结束点1纵坐标 cp2x:控制点2横坐标 cp2y:控制点2纵坐标 z:结束点2横 ...
- 基于canvas实现的高性能、跨平台的股票图表库--clchart
什么是 ClChart? ClChart是一个基于canvas创建的简单.高性能和跨平台的股票数据可视化开源项目.支持PC.webApp以及React Native和Weex等平台.在React Na ...
- 基础canvas应用-钟表绘制
首先,canvas语法基础薄弱的小伙伴请点这里,剩下的小伙伴们可以接着往下看了. 一个表,需要画什么出来呢:3条线(时分秒针),1个圆(表盘),以及60条短线/点(刻度). 嗯,没毛病. 那接下来让我 ...
随机推荐
- input和btton的相互使用————小程序
input和btton的相互使用----小程序 index.js data: { userxx:'1111', }, changeSum(){ // this.data.userxx="ch ...
- Django中自定义模型管理器(Manager)及方法
1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个ma ...
- java反射机制,以及对反射机制的了解
反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...
- 【linux】【jenkins】自动化运维七 整合sonarqube代码审查
1.安装插件:SonarQube Scanner for Jenkins 插件安装教程参考:https://www.cnblogs.com/jxd283465/p/11542680.html 2.So ...
- 【linux】linux固定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33为ifconfig显示的网卡名 TYPE="Ethernet"P ...
- 小程序开发初体验,从静态demo到接入Bmob数据库完全实现
之前我胖汾公司年会.问我能不能帮忙搞个小程序方便他们进行游戏后的惩罚/抽奖使用.出了个简单的设计图.大概三天左右做了个简单的小程序.目前提交审核了.对于写过一小段时间vue来说小程序很容易上手.写法和 ...
- APP功能测试要点(功能测试重点)
APP功能测试要点 1.功能性测试 根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等 1.1 安装与卸 ...
- 分布式session共享机制分析
使用配置: 1.在pom文件中引入spring-session的jar包 <!--springsession--><dependency><groupId>org. ...
- 在网页中动态地给表格添加一行内容--HTML+CSS+JavaScript
需求描述: 用户在页面上点击按钮,可以把文本框中的数据在表格的新的一行中显示,具体表现如下图: 如果如果输入框内容有一项为空,弹出对话框‘请将数据填入完全 步骤: 1.按钮注册单击事件 2.获取并判断 ...
- Tornado基础学习篇
1.1 Tornado是什么? Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应 ...