最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

canvas与JS实现动态时钟动画

来源:懂视网 责编:小采 时间:2020-11-27 19:54:24
文档

canvas与JS实现动态时钟动画

canvas与JS实现动态时钟动画:这次给大家带来canvas与JS实现动态时钟动画,canvas与JS实现动态时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。 先来看看运行效果: 完整实例代码:<!DOCTYPE html> <html> <head lang="en&quo
推荐度:
导读canvas与JS实现动态时钟动画:这次给大家带来canvas与JS实现动态时钟动画,canvas与JS实现动态时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。 先来看看运行效果: 完整实例代码:<!DOCTYPE html> <html> <head lang="en&quo

这次给大家带来canvas与JS实现动态时钟动画,canvas与JS实现动态时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。

先来看看运行效果:

QQ截图20180417170436.png

完整实例代码:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>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>

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

优化页面加载速度插件InstantClick

预加载InstantClick使用详解

InstantClick怎么设置才能兼容MathJax与百度统计等

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

canvas与JS实现动态时钟动画

canvas与JS实现动态时钟动画:这次给大家带来canvas与JS实现动态时钟动画,canvas与JS实现动态时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。 先来看看运行效果: 完整实例代码:<!DOCTYPE html> <html> <head lang="en&quo
推荐度:
标签: 动画 js 动态时钟
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top