本文实例讲述了JS+canvas绘制的动态机械表动画效果。分享给大家供大家参考,具体如下:

先来看看运行效果:
完整实例代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>www. canvas时钟</title>
<style>
canvas {
border: 1px solid red;
}
</style>
</head>
<body>
<canvas width="800" height="600"></canvas>
</body>
<script>
function Clock(opt) {
for (var key in opt) {
this[key] = opt[key];
}
this.init();
}
Clock.prototype = {
init: function () {
var self = this;
var ctx = this.ctx;
this.timer = setInterval(function(){
ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);
self.drawDial();
self.drawDegreeScale();
self.drawNumber();
self.drawPointers();
},1000);
},
drawDial: function () {
var ctx = this.ctx;
ctx.save();
ctx.beginPath();
ctx.lineWidth = this.clockDialW;
ctx.strokeStyle = this.clockDialColor;
ctx.arc(this.clockX, this.clockY, this.clockRadius, 0, 2 * Math.PI);
ctx.stroke();
ctx.restore();
},
drawDegreeScale: function () {
var ctx = this.ctx;
var clockRadius = this.clockRadius;
var clockX = this.clockX;
var clockY = this.clockY;
var bigDegreeScaleL = this.bigDegreeScaleL;
var smallDegreeScale = this.smallDegreeScale;
var startX, startY, endX, endY, radian;
ctx.save();
for (var i = 0; i < 12; i++) {
radian = i * Math.PI / 6;
endX = clockX + clockRadius * Math.cos(radian);
endY = clockY + clockRadius * Math.sin(radian);
if (radian % (Math.PI / 2) == 0) {
startX = clockX + (clockRadius - bigDegreeScaleL) * Math.cos(radian);
startY = clockY + (clockRadius - bigDegreeScaleL) * Math.sin(radian);
ctx.lineWidth = this.bigDCWidth;
} else {
startX = clockX + (clockRadius - smallDegreeScale) * Math.cos(radian);
startY = clockY + (clockRadius - smallDegreeScale) * Math.sin(radian);
ctx.lineWidth = this.smallDCWidth;
}
ctx.beginPath();
ctx.moveTo(startX, startY);
ctx.lineTo(endX, endY);
ctx.stroke();
ctx.restore();
}
},
drawNumber: function () {
var ctx = this.ctx;
var textX, textY, textRadian;
var clockX = this.clockX;
var clockY = this.clockY;
var clockRadius = this.clockRadius;
ctx.font = '20px 微软雅黑';
ctx.fillStyle = 'red';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.save();
for (var i = 0; i < 12; i++) {
textRadian = i * Math.PI / 6 - Math.PI/3;
textX = clockX + (clockRadius - 40) * Math.cos(textRadian);
textY = clockY + (clockRadius - 40) * Math.sin(textRadian);
ctx.beginPath();
ctx.fillText(i + 1, textX, textY);
}
ctx.restore();
},
drawPointers: function () {
var date = new Date();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
h = h % 12;
var hRadian = 2 * Math.PI / 12 * h - Math.PI / 2;
this.drawPoint(hRadian,30,'red',8);
var mRadian = 2 * Math.PI / 60 * m - Math.PI / 2;
this.drawPoint(mRadian,50,'blue',6);
var sRadian = 2 * Math.PI / 60 * s - Math.PI / 2;
this.drawPoint(sRadian,70,'green',2);
},
drawPoint: function (radian, length,color,lineWidth) {
var x = this.clockX + Math.cos(radian) * length;
var y = this.clockY + Math.sin(radian) * length;
var ctx = this.ctx;
ctx.save();
ctx.beginPath();
ctx.strokeStyle = color;
ctx.lineWidth = lineWidth;
ctx.moveTo(this.clockX,this.clockY);
ctx.lineTo(x,y);
ctx.stroke();
ctx.restore();
}
};
</script>
<script>
var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');
var clock = new Clock({
ctx: this.ctx,
clockRadius: 150,
clockX: 300,
clockY: 300,
clockDialW: 6,
clockDialColor: 'blue',
bigDegreeScaleL: 20,
bigDCWidth: 6,
smallDegreeScale: 10,
smallDCWidth: 4
});
</script>
</html>
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript动画特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# canvas
# 绘制
# 动态
# 机械表
# 动画
# js canvas实现写字动画效果
# JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
# javascript+HTML5的Canvas实现Lab单车动画效果
# js+canvas实现画板功能
# js+canvas实现刮刮奖功能
# js实现贪吃蛇游戏 canvas绘制地图
# 使用js和canvas实现时钟效果
# javascript使用canvas实现饼状图效果
# javascript canvas实现简易时钟例子
# JS Canvas接口和动画效果大全
# 相关内容
# 感兴趣
# 数据结构
# 微软
# 给大家
# 更多关于
# 所述
# 先来
# 程序设计
# 讲述了
# init
# key
# var
# timer
# ctx
# prototype
# opt
# height
# Clock
# function
相关文章:
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
一键网站制作软件,义乌购一件代发流程?
网站制作话术技巧,网站推广做的好怎么话术?
实例解析angularjs的filter过滤器
建站之星价格显示格式升级,你的预算足够吗?
如何高效利用亚马逊云主机搭建企业网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
深圳网站制作案例,网页的相关名词有哪些?
如何快速启动建站代理加盟业务?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星云端配置指南:模板选择与SEO优化一键生成
建站之星在线客服如何快速接入解答?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站之星安装后如何配置SEO及设计样式?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
,如何利用word制作宣传手册?
高防服务器如何保障网站安全无虞?
如何基于云服务器快速搭建网站及云盘系统?
如何通过虚拟主机快速完成网站搭建?
高端云建站费用究竟需要多少预算?
如何在IIS7上新建站点并设置安全权限?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站之星代理如何获取技术支持?
如何在阿里云完成域名注册与建站?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
建站之星北京办公室:智能建站系统与小程序生成方案解析
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何使用Golang安装API文档生成工具_快速生成接口文档
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
Swift中switch语句区间和元组模式匹配
Swift开发中switch语句值绑定模式
制作门户网站的参考文献在哪,小说网站怎么建立?
如何选择PHP开源工具快速搭建网站?
Python lxml的etree和ElementTree有什么区别
深圳网站制作平台,深圳市做网站好的公司有哪些?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何自定义建站之星模板颜色并下载新样式?
建站之星官网登录失败?如何快速解决?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
高端建站如何打造兼具美学与转化的品牌官网?
如何通过wdcp面板快速创建网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
开源网站制作软件,开源网站什么意思?
广平建站公司哪家专业可靠?如何选择?
网站制作公司,橙子建站是合法的吗?
如何用wdcp快速搭建高效网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。