国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涪陵区| 周宁县| 肥西县| 保亭| 长乐市| 泗阳县| 江川县| 东台市| 丁青县| 灵山县| 闽侯县| 化州市| 唐河县| 平塘县| 深水埗区| 鄱阳县| 潮安县| 社旗县| 积石山| 宜川县| 平顶山市| 宜君县| 榆树市| 成都市| 阿拉善右旗| 菏泽市| 余江县| 扎囊县| 彰化县| 东乌珠穆沁旗| 龙里县| 古蔺县| 武汉市| 青岛市| 广平县| 六枝特区| 扶绥县| 绥棱县| 荔浦县| 义马市| 西乡县|