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

首頁 > 編程 > HTML > 正文

用HTML5的canvas實現一個炫酷時鐘效果

2020-03-24 18:26:16
字體:
來源:轉載
供稿:網友
對于H5來說,canvas可以說是它最有特色的一個地方了,有了它之后我們可以隨意的在網頁上畫各種各樣的圖形,做一些小游戲啊什么的。canvas這個標簽的用法,在網上也有特別多的教程了,這里就不作介紹了。今天我們就用canvas來做一個小小的時鐘。那么首先在這個頁面里面我使用了兩個canvas,一個用來繪制靜態的時鐘表盤和刻度,另一個用來繪制時鐘的三個指針,然后用定位讓他們重合到一起。然后這里沒什么好說的,下面附上代碼。JavaScript Code復制內容到剪貼板
varplate=document.getElementById('plate'); varneedles=document.getElementById('needles'); needles.setAttribute('style','position:absolute;top:8px;left:8px;');//這里因為chrome里面,body的magin值為8px,所以我這里就沒設為0了。 varcntP=plate.getContext('2d'); varcntH=needles.getContext('2d'); plate.width=800; plate.height=500; needles.width=800; needles.height=500;
到了這里準備工作就做完了,下面就準備繪制時鐘了。我先定義了一個繪制時鐘表盤的html' target='_blank'>構造函數。JavaScript Code復制內容到剪貼板
functiondrawclock(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){ //獲得表盤刻度兩端的坐標 varX=200+this.radius*Math.sin(6*i*Math.PI/180); varY=200-this.radius*Math.cos(6*i*Math.PI/180); varx=200+(this.radius-this.platelen)*Math.sin(6*i*Math.PI/180); vary=200-(this.radius-this.platelen)*Math.cos(6*i*Math.PI/180); //獲得分鐘數字的坐標 varnumx=200+(this.radius-this.platelen-this.numLen)*Math.sin(6*i*Math.PI/180); varnumy=200-(this.radius-this.platelen-this.numLen)*Math.cos(6*i*Math.PI/180); //獲得小時數字的坐標 varnumX=200+(this.radius-this.platelen-this.NUMLEN)*Math.sin(6*i*Math.PI/180); varnumY=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(vari=0,coorObj;i 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.stroke ; i%5==0 (this.cnt.stroke ) (this.cnt.lineWidth=this.linewidth*2); i%15==0 (this.cnt.stroke ) (this.cnt.lineWidth=this.linewidth*3); this.cnt.stroke(); this.cnt.font='10pxArial'; this.cnt.fill ; this.cnt.fillText(i,coorObj.numx-7,coorObj.numy+3); i%5==0 (this.cnt.fill ) (this.cnt.font='18pxArial') (this.cnt.fillText(i/5,coorObj.numX-5,coorObj.numY+5)); } }; } varclock=newdrawclock(cntP,200,5,1,10,25);//實例化一個表盤對象 clock.drawCalibration();
這里最重要的部分就應該是獲得刻度和數字繪制的坐標了。我把繪制刻度的起始點放在了表盤的邊緣上,然后從表盤的半徑上減去刻度的長度,就可以得到刻度終點的位置,然后利用角度和三角函數得到兩個點的坐標。最后就可以繪制出表盤的刻度了。下面繪制出表盤上的數字也是一樣的方法。我這里吧表盤的中心放在了(200,200)這里位置。到了這里我們就已經繪制好了一個靜態的時鐘表盤。下面我又定義了一個繪制時鐘指針的構造函數。JavaScript Code復制內容到剪貼板
functionclockNeedle(cnt,R,lineWidth,strokeStyle,lineCap,obj){ this.R=R; this.cnt=cnt; this.lineWidth=lineWidth; this.stroke >這里有兩個地方需要說一下:1、在我們獲得當前時間的的毫秒數,然后轉換為小時的時候,對24取模計算出當天的小時數的時候,這里需要加上8。2、如果想要使用lineCap這個屬性嗎,那么上面在設置路徑的時候,不要用closePath()。到了這里我們還需要一個來繪制指針的方法,并且讓指針看起來能夠轉動:JavaScript Code復制內容到剪貼板
functiondraw(){ cntH.clearRect(0,0,needles.width,needles.height); varmzneedle=newclockNeedle(cntH,200,1,'rgba(0,0,0,.5)','round',2); //最后一個參數0代表畫時針,1畫分針,2畫秒針 varfzneedle=newclockNeedle(cntH,80,3,'rgba(0,0,0,.4)','round',0); varszneedle=newclockNeedle(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.fill ; cntH.fill(); } setInterval(draw,1);
以上這篇用HTML5的canvas實現一個炫酷時鐘效果就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持phpstudy。原文地址:http://www.cnblogs.com/ww-ervin-72/p/5325773.htmlhtml教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新化县| 阳东县| 马关县| 栾城县| 江北区| 长治市| 安阳市| 莱阳市| 虞城县| 沾益县| 金门县| 于田县| 万年县| 凤庆县| 双鸭山市| 奉贤区| 三都| 长白| 锡林浩特市| 崇明县| 靖西县| 湘西| 阿拉善左旗| 定襄县| 托克托县| 澄迈县| 齐齐哈尔市| 松桃| 郯城县| 兴安县| 金山区| 普格县| 濮阳县| 丽水市| 孙吴县| 封丘县| 鹤岗市| 东城区| 永宁县| 炎陵县| 平定县|