JS+canvas绘制的动态机械表动画效果
发布时间 - 2026-01-11 03:13:10 点击率:次本文实例讲述了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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何在阿里云ECS服务器部署织梦CMS网站?
如何在云主机上快速搭建多站点网站?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何快速搭建自助建站会员专属系统?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何用VPS主机快速搭建个人网站?
香港服务器租用每月最低只需15元?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何在Windows环境下新建FTP站点并设置权限?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
在线教育网站制作平台,山西立德教育官网?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何使用模型观察者?(Observer代码示例)
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
简历在线制作网站免费版,如何创建个人简历?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在建站之星绑定自定义域名?
javascript读取文本节点方法小结
如何为不同团队 ID 动态生成多个独立按钮
如何用免费手机建站系统零基础打造专业网站?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
JavaScript如何实现倒计时_时间函数如何精确控制
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
bing浏览器学术搜索入口_bing学术文献检索地址
bootstrap日历插件datetimepicker使用方法
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
重庆市网站制作公司,重庆招聘网站哪个好?
如何确保FTP站点访问权限与数据传输安全?
原生JS获取元素集合的子元素宽度实例
Android 常见的图片加载框架详细介绍
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
非常酷的网站设计制作软件,酷培ai教育官方网站?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel如何生成URL和重定向?(路由助手函数)
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel如何使用Gate和Policy进行授权?(权限控制)
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
上一篇:怎么实现APT28样本分析
上一篇:怎么实现APT28样本分析

