全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS+canvas绘制的动态机械表动画效果

本文实例讲述了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 


相关文章: 建站VPS能否同时实现高效与安全翻墙?  定制建站哪家更专业可靠?推荐榜单揭晓  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Python多线程使用规范_线程安全解析【教程】  如何挑选高效建站主机与优质域名?  如何通过FTP空间快速搭建安全高效网站?  建站主机数据库如何配置才能提升网站性能?  建站之家VIP精选网站模板与SEO优化教程整合指南  成都网站制作报价公司,成都工业用气开户费用?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站主机助手选型指南:2025年热门推荐与高效部署技巧  网站制作报价单模板图片,小松挖机官方网站报价?  如何在IIS7中新建站点?详细步骤解析  如何通过PHP快速构建高效问答网站功能?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何在Tomcat中配置并部署网站项目?  建站之星Pro快速搭建教程:模板选择与功能配置指南  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  建站之星展会模板:智能建站与自助搭建高效解决方案  如何快速搭建高效可靠的建站解决方案?  ,石家庄四十八中学官网?  网站制作需要会哪些技术,建立一个网站要花费多少?  C#怎么创建控制台应用 C# Console App项目创建方法  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何通过远程VPS快速搭建个人网站?  制作网页的网站有哪些,电脑上怎么做网页?  建站之星与建站宝盒如何选择最佳方案?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  实现虚拟支付需哪些建站技术支撑?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何通过.red域名打造高辨识度品牌网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在香港服务器上快速搭建免备案网站?  制作旅游网站html,怎样注册旅游网站?  如何自定义建站之星网站的导航菜单样式?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何挑选优质建站一级代理提升网站排名?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站代码制作软件有哪些,如何生成自己网站的代码?  如何用PHP快速搭建CMS系统?  小型网站制作HTML,*游戏网站怎么搭建?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  已有域名能否直接搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。