




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、js+html5實現canvas繪制網頁時鐘的方法_ 這篇文章主要介紹了js+html5實現canvas繪制網頁時鐘的方法,涉及html5圖形繪制的基礎技巧,感愛好的伴侶可以參考一下 本文實例講解并描述了js+html5實現canvas繪制網頁時鐘的方法,畫的是一個可用于網頁的、帶擺的鐘表,可以通過按鈕調整其大小和位置,具體實現內容如下 html head meta http-equiv=Content-Type content=text/html; charset=utf-8 / titleClock/title script type=text/javascript var xClock=
2、300; /表心位置 var yClock=250; /表心位置 var d=180.0;/鐘表圓面的半徑 var value = -d*1.07; function enlarge() d+; function reduce() d-; function westwards() var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); g2d.translate(-1,0); /置坐標軸原點于表心 c=document.getElementById(myPendulum); g2d=c.getContext(2d);
3、 g2d.translate(-1,0); /置坐標軸原點于表心 function eastwards() var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); g2d.translate(1,0); /置坐標軸原點于表心 c=document.getElementById(myPendulum); g2d=c.getContext(2d); g2d.translate(1,0); /置坐標軸原點于表心 function upwards() var c=document.getElementById(myCanva
4、s); var g2d=c.getContext(2d); g2d.translate(0,-1); /置坐標軸原點于表心 c=document.getElementById(myPendulum); g2d=c.getContext(2d); g2d.translate(0,-1); /置坐標軸原點于表心 function downwards() var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); g2d.translate(0,1); /置坐標軸原點于表心 c=document.getElementById(
5、myPendulum); g2d=c.getContext(2d); g2d.translate(0,1); /置坐標軸原點于表心 function fillPolygon( a, b, fillColor, ctx) ctx.beginPath(); ctx.moveTo(a0,b0); for (var j=1;ja.length;j+) ctx.lineTo(aj,bj); ctx.closePath(); ctx.fillStyle=fillColor; ctx.fill(); function randomColor() var s =#; for (var i=0;i3;i+) s
6、 += Math.floor(Math.random()*16).toString(16); return s; function locateCoordinate() var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); g2d.translate(xClock,yClock); /置坐標軸原點于表心 var c=document.getElementById(myPendulum); var g2d=c.getContext(2d); g2d.translate(xClock,yClock); /置坐標軸原點于
7、表心 function drawFace() /定義畫鐘表表面drawFace方法 /* 表示1,2,4,5,7,8,10,11點鐘位置的較小尺寸的菱形標記頂點坐標數組 */ var x = new Array(0, Math.round(d/30), 0, Math.round(-d/30); var y = new Array( Math.round(-d*1.07),-d,Math.round(-d*0.9),-d); /* 表示3,6,9,12點鐘位置的較大尺寸的菱形標記頂點坐標數組 */ var x1= new Array(0,Math.round(d/15),0,Math.roun
8、d(-d/15); var y1 =new Array(Math.round(-d*1.13),-d,Math.round(-d*0.9),-d); var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); /下面開頭 預備畫鐘表圓面邊 g2d.beginPath(); g2d.arc(0,0,d, 0 , 2*Math.PI); g2d.strokeStyle=lightGray; g2d.lineWidth=d/18; g2d.stroke(); /最終一筆,畫鐘表圓面邊 /下面開頭預備畫表示 每個鐘點 的菱形 f
9、or (var i=0;i12;i+) /for 循環(huán)語句的循環(huán)體開頭 if (i%3=0) /畫較大尺寸的紅色菱形,表示3,6,9,12點 fillPolygon( x1, y1, red, g2d); else /畫較小尺寸的桔黃色菱形,表示其余的鐘點 fillPolygon(x,y,orange,g2d); /以鐘表表心為原點,坐標系順時針轉動30度,以便畫下一個鐘點位置的菱形標記 g2d.rotate(Math.PI/6.0); /for 循環(huán)語句的循環(huán)體結束 /畫鐘表表面 drawFace 方法結束 /* 定義畫鐘表的時針、分針、和秒針的方法 drawNeedles * 形參 Hra
10、dian,單位弧度, 為時針從0點算起的弧度位置, * 形參 Mradian,單位弧度, 為分針從0分算起的弧度位置, * 形參 Sradian,單位弧度, 為秒針從0秒算起的弧度位置。*/ function drawNeedles( Hradian, Mradian, Sradian ) var c=document.getElementById(myCanvas); var g2d=c.getContext(2d); /以鐘表表心為原點,坐標系順時針轉動Hradian弧度,以便畫出時針 g2d.rotate(Hradian); /表示時針的多邊形頂點的坐標數組 var Hx =new Ar
11、ray(0, Math.round(d/19),0, Math.round(-d/19) ); var Hy =new Array( Math.round(-d/2), Math.round(-d/3), 0, Math.round(-d/3) ); fillPolygon(Hx,Hy,magenta,g2d);/時針設為紫紅色, /以鐘表表心為原點,坐標系逆時針轉動Hradian弧度,以還原坐標系 g2d.rotate(-Hradian); /以鐘表表心為原點,坐標系順時針轉動Mradian弧度,以便畫出分針 g2d.rotate(Mradian); /表示分針的多邊形頂點的坐標數組 var
12、 Mx=new Array(Math.round(-d/19),0,Math.round(d/19); var My=new Array(0,Math.round(-d/1.3),0); fillPolygon(Mx,My,gray,g2d); /分針設為灰色 /以鐘表表心為原點,坐標系逆時針轉動Mradian弧度,以還原坐標系 g2d.rotate(-Mradian); /以鐘表表心為原點,坐標系順時針轉動Sradian弧度,以便畫出秒針 g2d.rotate(Sradian); / 秒針設為隨機顏色 g2d.strokeStyle=green; g2d.lineWidth=1; g2d.m
13、oveTo(0,0); g2d.lineTo(0,Math.round(-d/1.1); g2d.stroke(); g2d.beginPath(); g2d.arc(0,Math.round(-d),d/18, 0 , 2*Math.PI); g2d.fillStyle=randomColor(); g2d.fill(); /最終一筆,畫秒針頂點的小球 /以鐘表表心為原點,坐標系逆時針轉動Sradian弧度,以還原坐標系 g2d.rotate(-Sradian); /畫表針方法 drawNeedles的代碼塊結束 /* 畫出字符串來表示瞬時時間 */ function DrawTime()
14、var time=new Date(); /獵取當前時間。 var hour=time.getHours(); /獵取小時 var minute=time.getMinutes();/獵取分鐘 var second=time.getSeconds();/獵取秒數 var apm=AM; /默認顯示上午:AM. var canvas =document.getElementById(myCanvas); var g2d =canvas.getContext(2d); if(hour12) /根據12小時制止顯示 hour=hour-12; apm=PM; if(minute10) /假如分鐘只有
15、1位,補0顯示 minute=0+minute; if(second10) /假如秒數只有1位,補0顯示 second=0+second; g2d.clearRect(-xClock,-yClock,600,600); /清屏 var s = hour+:+minute+:+second+:+apm; g2d.fillStyle=red; g2d.font = d/4+ px KAITI; g2d.fillText(s,-d/1.8, d*1.4); g2d.font= d/4 + px 楷體; / Create gradient var gradient=g2d.createLinearGr
16、adient(0,0,canvas.width,0); gradient.addColorStop(0,magenta); gradient.addColorStop(0.5,blue); gradient.addColorStop(1.0,red); / Fill with gradient g2d.fillStyle=gradient; g2d.fillText(大數據,-d/2.6,d/2); /獲得實例創(chuàng)建瞬間的秒讀數,由此計算出秒針,相對于0 秒,走過的弧讀數 var c = Math.PI/30 * second; /獲得創(chuàng)建瞬間的的分鐘讀數,由此計算出分針,相對于0 分,走過的弧
17、讀數 var b = Math.PI/30 * minute; /* 獲得創(chuàng)建瞬間的的鐘點讀數,由此計算出時針,相對于0 點,走過的弧讀數。 * 時針走過的弧度為整點的度數(每小時走30度),加上走過分鐘數的修正值 */ var a = Math.PI/180*(30 * hour + minute/2); /* 坐標系平移 (xClock,yClock) ,使得坐標軸成為表盤中心 */ drawFace(); drawNeedles( a, b, c); / 方法 DrawTime 的代碼塊結束 var i=0; function pendulum() /pendulum_bob var i
18、nstantAngle = new Array(64,61,56,49,40,29,16,3,-8, -16,-29,-40,-49,-56,-61,-64,-64,-64,-61,-56,-49,-40,-29, -16,-8,3,16,29,40,49,56,61,64,64); /擺的即時角度數組 var c=document.getElementById(myPendulum); var ctx=c.getContext(2d); var alpha=instantAnglei+%instantAngle.length*Math.PI/180; ctx.clearRect(-300,-
19、300,900,900); ctx.rotate(alpha); / 秒針設為隨機顏色 ctx.fillStyle=brown; ctx.fillRect(-3,0,6,d*1.4); ctx.shadowBlur=20; ctx.shadowColor=black; ctx.fillStyle=blue; /ctx.fillRect(-d/3.5, d*1.35, d/1.6, d/4.4); ctx.font=40px 楷體; / Create gradient var gradient=ctx.createLinearGradient(0,0,c.width,0); gradient.a
20、ddColorStop(0,magenta); gradient.addColorStop(0.5,blue); gradient.addColorStop(1.0,white); / Fill with gradient /ctx.fillStyle=gradient; ctx.fillStyle=red; ctx.fillText(大數據,-d/3.2,d*1.55); ctx.shadowBlur=0; ctx.shadowColor=null; ctx.fillStyle=null; ctx.rotate(-alpha); function preparation() locateCo
21、ordinate() setInterval(DrawTime(),500); setInterval(pendulum(),200); /script style #myCanvas z-index:3; position:absolute; left:0px; top:0px; #myPendulum z-index:2; position:absolute; left:0px; top:0px; #controlPanel position:absolute; left:600px; top:0px; width:100px; text-align:center; font-family:楷體; font-size:20px; font-weight:bold; color:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初一上學期長郡數學試卷
- 高級瓦楞紙板及紙箱生產項目環(huán)評報告表
- 通信電纜施工方案
- 2024-2025學年下學期高一語文第二單元B卷
- 柴油裝卸系統(tǒng)施工方案
- 【專精特新】稀土永磁材料企業(yè)專精特新“小巨人”成長之路(智研咨詢)
- 信息技術下的立體幾何教學初探
- 高中歷史課堂教學情境創(chuàng)設的策略研究
- 南京科遠KD200變頻器使用手冊
- 中外教育史知到課后答案智慧樹章節(jié)測試答案2025年春牡丹江師范學院
- 2025年鐵嶺衛(wèi)生職業(yè)學院單招職業(yè)傾向性測試題庫學生專用
- (一模)2025屆安徽省“江南十?!备呷?lián)考地理試卷(含官方答案)
- 數學-2025屆安徽省江南十校聯(lián)考試題和解析
- 2025年遼寧現代服務職業(yè)技術學院單招職業(yè)技能測試題庫(含答案)
- 高考模擬作文“中國游”“city不city”導寫及范文
- 福建省福州市2024-2025學年九年級上學期期末語文試題(解析版)
- 普通高中學生綜合素質評價自我陳述報告
- 2025年江西電力職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年吉安職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 《展示設計》課件-第一章 展示設計概述
- 建筑施工安全管理存在的問題及對策【15000字(論文)】
評論
0/150
提交評論