亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript html5 canvas繪制時鐘效果(二)

2019-11-20 10:20:29
字體:
來源:轉載
供稿:網友

 對于H5來說,canvas可以說是它最有特色的一個地方了,有了它之后我們可以隨意的在網頁上畫各種各樣的圖形,做一些小游戲啊什么的。canvas這個標簽的用法,在網上也有特別多的教程了,這里就不作介紹了。今天我們就用canvas來做一個小小的時鐘。完整的代碼在這里https://github.com/wwervin72/HTML5-Clock

那么首先在這個頁面里面我使用了兩個canvas,一個用來繪制靜態的時鐘表盤和刻度,另一個用來繪制時鐘的三個指針,然后用定位讓他們重合到一起。然后這里沒什么好說的,下面附上代碼。

<canvas id="plate"> 畫表盤</canvas><canvas id="needles"> 畫時針</canvas>
var plate=document.getElementById('plate');var needles=document.getElementById('needles');needles.setAttribute('style','position:absolute;top:8px;left:8px;'); //這里因為chrome里面,body的magin值為8px,所以我這里就沒設為0了。var cntP=plate.getContext('2d');var cntH=needles.getContext('2d');plate.width=800;plate.height=500;needles.width=800;needles.height=500;

到了這里準備工作就做完了,下面就準備繪制時鐘了。我先定義了一個繪制時鐘表盤的構造函數。

 function drawclock(cnt,radius,platelen,linewidth,numLen,NUMLEN){  this.cnt=cnt;  this.radius=radius;  this.platelen=platelen;  this.linewidth=linewidth;  this.numLen=numLen;  this.NUMLEN=NUMLEN;  this.getCalibCoor=function(i){   //獲得表盤刻度兩端的坐標  var X=200+this.radius*Math.sin(6*i*Math.PI/180);  var Y=200-this.radius*Math.cos(6*i*Math.PI/180);  var x=200+(this.radius-this.platelen)*Math.sin(6*i*Math.PI/180);  var y=200-(this.radius-this.platelen)*Math.cos(6*i*Math.PI/180);  // 獲得分鐘數字的坐標  var numx=200+(this.radius-this.platelen-this.numLen)*Math.sin(6*i*Math.PI/180);  var numy=200-(this.radius-this.platelen-this.numLen)*Math.cos(6*i*Math.PI/180);  //獲得小時數字的坐標  var numX=200+(this.radius-this.platelen-this.NUMLEN)*Math.sin(6*i*Math.PI/180);   var numY=200-(this.radius-this.platelen-this.NUMLEN)*Math.cos(6*i*Math.PI/180);  return {X:X,Y:Y,x:x,y:y,numx:numx,numy:numy,numX:numX,numY:numY};  };  this.drawCalibration=function(){ //畫刻度  for(var i=0,coorObj;i<60;i++){   coorObj=this.getCalibCoor(i);   this.cnt.beginPath();   this.cnt.moveTo(coorObj.X,coorObj.Y);   this.cnt.lineTo(coorObj.x,coorObj.y);   this.cnt.closePath();   this.cnt.lineWidth=this.linewidth;   this.cnt.strokeStyle='#ddd';   i%5==0&&(this.cnt.strokeStyle='#aaa')   &&(this.cnt.lineWidth=this.linewidth*2);   i%15==0&&(this.cnt.strokeStyle='#999')   &&(this.cnt.lineWidth=this.linewidth*3);   this.cnt.stroke();   this.cnt.font='10px Arial';   this.cnt.fillStyle='rgba(0,0,0,.2)';   this.cnt.fillText(i,coorObj.numx-7,coorObj.numy+3);   i%5==0&&(this.cnt.fillStyle='rgba(0,0,0,.5)')   &&(this.cnt.font='18px Arial')   &&(this.cnt.fillText(i/5,coorObj.numX-5,coorObj.numY+5));  }  }; }      var clock=new drawclock(cntP,200,5,1,10,25); //實例化一個表盤對象      clock.drawCalibration();

這里最重要的部分就應該是獲得刻度和數字繪制的坐標了。我把繪制刻度的起始點放在了表盤的邊緣上,然后從表盤的半徑上減去刻度的長度,就可以得到刻度終點的位置,然后利用角度和三角函數得到兩個點的坐標。最后就可以繪制出表盤的刻度了。下面繪制出表盤上的數字也是一樣的方法。我這里吧表盤的中心放在了(200,200)這里位置。到了這里我們就已經繪制好了一個靜態的時鐘表盤。

下面我又定義了一個繪制時鐘指針的構造函數。

function clockNeedle(cnt,R,lineWidth,strokeStyle,lineCap,obj){  this.R=R;  this.cnt=cnt;  this.lineWidth=lineWidth;  this.strokeStyle=strokeStyle;  this.lineCap=lineCap;  this.obj=obj;  this.getNeedleCoor=function(i){  var X=200+this.R*0.8*Math.sin(i); //起點的坐標  var Y=200-this.R*0.8*Math.cos(i);  var x=200-20*Math.sin(i); //終點的坐標  var y=200+20*Math.cos(i);  return {X:X,Y:Y,x:x,y:y};  };  this.drawNeedle=function(){  var d=new Date().getTime();  var angle;  switch(this.obj){   case 0:   angle=(d/3600000%24+8)/12*360*Math.PI/180;   break;   case 1:   angle=d/60000%60/60*360*Math.PI/180;   break;   case 2:   angle=d/1000%60/60*360*Math.PI/180;   break;  }  var coorobj=this.getNeedleCoor(angle);  this.cnt.beginPath();  this.cnt.moveTo(coorobj.x,coorobj.y);  this.cnt.lineTo(coorobj.X,coorobj.Y);  // this.cnt.closePath();  this.cnt.lineWidth=this.lineWidth;  this.cnt.strokeStyle=this.strokeStyle;  this.cnt.lineCap=this.lineCap;  this.cnt.stroke();  } }


這里有兩個地方需要說一下:1、在我們獲得當前時間的的毫秒數,然后轉換為小時的時候,對24取模計算出當天的小時數的時候,這里需要加上8。2、如果想要使用lineCap這個屬性嗎,那么上面在設置路徑的時候,不要用closePath()。

到了這里我們還需要一個來繪制指針的方法,并且讓指針看起來能夠轉動:

function draw(){  cntH.clearRect(0,0,needles.width,needles.height);  var mzneedle=new clockNeedle(cntH,200,1,'rgba(0,0,0,.5)','round',2);  //最后一個參數0代表畫時針,1畫分針,2畫秒針  var fzneedle=new clockNeedle(cntH,80,3,'rgba(0,0,0,.4)','round',0);  var szneedle=new clockNeedle(cntH,140,2,'rgba(0,0,0,.3)','round',1);  mzneedle.drawNeedle();  fzneedle.drawNeedle();  szneedle.drawNeedle();  cntH.arc(200,200,5,0,2*Math.PI);  cntH.fillStyle='rgba(0,0,0,.5)';  cntH.fill(); } setInterval(draw,1);

下面附上該時鐘的圖片:

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
8050国产精品久久久久久| 欧洲成人性视频| 大量国产精品视频| 亚洲美女在线视频| 国产免费久久av| 在线观看久久av| 91性高湖久久久久久久久_久久99| 亚洲精品动漫久久久久| 欧美亚洲国产日韩2020| 久久av在线播放| 国产精品h片在线播放| 97**国产露脸精品国产| 久久视频在线看| 国产精品av免费在线观看| 国产91成人video| 97免费视频在线| 在线播放国产一区中文字幕剧情欧美| 2019国产精品自在线拍国产不卡| 国产精品视频资源| 色悠悠久久久久| 欧美激情精品久久久久久免费印度| 国产最新精品视频| 日韩中文在线中文网三级| 中文字幕成人在线| 日韩在线观看你懂的| 欧美日韩不卡合集视频| 国产美女精品视频| 亚洲free性xxxx护士hd| 日韩欧美综合在线视频| 欧美夜福利tv在线| 久久精品电影网| 国产一区二区日韩| 色偷偷888欧美精品久久久| 欧美性20hd另类| 国产不卡精品视男人的天堂| 日本一区二区在线播放| 在线播放精品一区二区三区| 日韩成人在线视频观看| 成人免费看吃奶视频网站| 亚洲精品国产综合区久久久久久久| 美日韩精品免费视频| 亚洲国产精品系列| 91精品国产色综合久久不卡98口| 欧美日韩国产在线播放| 欧美一级bbbbb性bbbb喷潮片| 中文字幕av一区| 欧美日韩午夜视频在线观看| 九九热最新视频//这里只有精品| 国产精品欧美一区二区| 日韩美女av在线| 欧美日韩第一页| 日韩在线视频中文字幕| 欧美亚洲成人精品| 精品一区二区三区四区在线| 欧美人在线视频| 国产99视频精品免视看7| 91九色综合久久| 免费99精品国产自在在线| 亚洲经典中文字幕| 国产精品久久久久久久7电影| 中文字幕亚洲欧美日韩在线不卡| 中文字幕日韩在线观看| 日韩成人av网址| 欧美在线视频一二三| 国产精品99导航| 97久久超碰福利国产精品…| 成人h猎奇视频网站| 久久av中文字幕| 欧美另类99xxxxx| 日韩精品一二三四区| 国产精品香蕉av| 38少妇精品导航| 国产日韩综合一区二区性色av| 日本国产欧美一区二区三区| 国产精品免费视频久久久| 欧美电影在线观看高清| 国产精品99久久久久久www| 韩国19禁主播vip福利视频| 欧美多人爱爱视频网站| 日本不卡免费高清视频| 国产精品草莓在线免费观看| 日韩av一区二区在线观看| 欧美日韩高清在线观看| 91精品国产成人| 亚洲第一精品夜夜躁人人躁| 亚洲色图美腿丝袜| 色综合久久中文字幕综合网小说| 国产丝袜精品第一页| 69久久夜色精品国产7777| 隔壁老王国产在线精品| 国产精品极品在线| 久久久免费观看| 97视频网站入口| 精品视频久久久久久久| 亚洲国产精品资源| 国产精品视频免费观看www| 成人在线中文字幕| 在线视频欧美日韩精品| 久久99视频免费| 日韩av一区在线观看| 久久精品99久久久香蕉| 欧美日韩国产一中文字不卡| 欧美日韩国产成人在线| 精品成人乱色一区二区| 视频一区视频二区国产精品| 日韩中文视频免费在线观看| 九九热精品视频| 97人人做人人爱| 揄拍成人国产精品视频| 国产精品福利在线观看网址| 国产精品三级网站| 欧美激情欧美狂野欧美精品| 91美女高潮出水| 日韩不卡在线观看| 中文字幕日韩欧美在线| www.日本久久久久com.| 欧美日韩视频在线| 久久国产精品久久久久久久久久| 97色在线播放视频| 中文字幕视频一区二区在线有码| 色吧影院999| 久久天天躁狠狠躁夜夜躁2014| 国产91九色视频| 欧美精品午夜视频| 69精品小视频| 国产一区二区三区四区福利| 亚洲精品二三区| 色青青草原桃花久久综合| 亚洲色无码播放| 日韩高清不卡av| 日韩视频免费在线| 精品色蜜蜜精品视频在线观看| 综合欧美国产视频二区| 国内精久久久久久久久久人| 亚洲福利精品在线| 欧美极品美女视频网站在线观看免费| 日本成人激情视频| 日韩欧美在线中文字幕| 久久久久北条麻妃免费看| 久久天天躁狠狠躁夜夜av| 91精品91久久久久久| 日韩亚洲一区二区| 在线亚洲国产精品网| 久久久久久91香蕉国产| 日韩**中文字幕毛片| 国产精品美女久久| 色午夜这里只有精品| 国产精品永久免费视频| 精品亚洲夜色av98在线观看| 精品性高朝久久久久久久| 国产一区二区三区在线观看视频| 97av在线播放| 欧美一级淫片播放口| 九九精品视频在线| 97色在线视频| 亚洲成人中文字幕| 久久久亚洲成人| 久久99久久99精品中文字幕| 91中文字幕一区| 久久久这里只有精品视频| 精品国产户外野外| 在线播放国产一区中文字幕剧情欧美| 国产精品色悠悠| 欧美性xxxx在线播放|