国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS+canvas繪制的動態機械表動畫效果

2019-11-19 15:28:55
字體:
來源:轉載
供稿:網友

本文實例講述了JS+canvas繪制的動態機械表動畫效果。分享給大家供大家參考,具體如下:

先來看看運行效果:

完整實例代碼:

<!DOCTYPE html><html><head lang="en">  <meta charset="UTF-8">  <title>m.survivalescaperooms.com 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄浦区| 扶绥县| 安福县| 嘉鱼县| 白河县| 花莲市| 三都| 合山市| 徐闻县| 肃宁县| 上蔡县| 聂荣县| 密云县| 遂川县| 中方县| 桐柏县| 衢州市| 博客| 乐都县| 侯马市| 惠水县| 桐城市| 博湖县| 沂水县| 临洮县| 永嘉县| 榆社县| 长葛市| 和林格尔县| 德格县| 萝北县| 苏州市| 沂水县| 漠河县| 永泰县| 朔州市| 同心县| 潍坊市| 瓮安县| 邛崃市| 淳化县|