HTML5夠強大實現很多功能,畫一個時鐘只是個小玩意。圖片指針用ctx的drawImage可以實現。至於相容性問題,網路上的解決方案已經很多了。這個東東是用來玩的,不是用來做應用的,學習下canvas API。 先給大家看效果圖 實作碼 複製程式碼程式碼如下: <br />// <![CDATA[ <br /> var time = new Date(); <br /> var h = time.getHours(); <br /> var m = time.getMinutes(); <br /> var s = time.getSeconds(); <br /> var weekday={:'星期日',:'星期一',:'星期二',:'星期三' ,:'星期四',:'星期五',:'星期六'}; <br /> h=h>?(h-)* parseInt(m/):h* parseInt(m/); //時針初始位置<br /> //===================================== <br /> var x=,y= ,sAngle=; //x y 原點秒針角度變數<br /> function draw() <br /> { <br /> var c=document.getElementById("myCanvas"); <br /> var ctx=c.getContext("d" ); <br /> ctx.clearRect(,,c.width,c.height); <br /> s ;//秒針<br /> //背景<br /> ctx.fillStyle = '#eee' // Make changes to the settings <br /> ctx.globalAlpha = .; <br /> ctx.fillRect(,,c.width,c.height); // Draw a rectangle with new settings <br /> //===填充(表明)原點=== <br /> ctx.beginPath(); <br /> ctx.arc(x,y,,true); <br /> ctx.fill(); <br /> ctx.closePath(); <br /> var grd=ctx.createLinearGradient(x,y,,); <br /> grd.addColorStop(,"#FF"); <br /> grd.addColorStop(.,"#FF"); <br /> grd.addColorStop,,,d. "#FF"); <br /> ctx.fillStyle=grd; <br /> ctx.font = "pt Arial"; <br /> ctx.fillText("html",,); <br /> ctx.save(); <br /> // 時間刻度<br /> for(var i=;i<;i ) <br /> { <br /> var angle=(Math.PI*)/; <br /> ctx.beginPath(); <br /> var b=i==||i==||i==||i== <br /> if(i%==){ <br /> if(b){ <br /> ctx.fillStyle="red "; <br /> radius=; <br /> } <br /> else{ <br /> ctx.fillStyle="blue"; <br /> radius=.; <br /> } <br /> ctx.font="px Arial" ; <br /> ctx.fillText(i/==?:i/,x-,y-); //x大-右小-左y大小數字刻度<br /> } <br /> else <br /> { <br /> ctx.fillStyle="#"; <br /> radius=; <br /> } <br /> if(s==i)radius=radius ; <br /> ctx.arc(x,y-,radius,,truey-,radius,,true ); <br /> ctx.fill(); <br /> transform(ctx,x,y,angle,true); <br /> } <br /> ctx.restore(); <br /> //======= ===================== <br /> sAngle=(Math.PI*)/*s; //秒度<br /> ctx.save(); / /時針<br /> ctx.fillStyle="red"; <br /> // ctx.strokeStyle="red"; <br /> ctx.lineWidth=; <br /> transform(ctx,x,y,(Math.PI* )/*h,true); <br /> sj(ctx,x,y,x-,y-,x ,y-); <br /> ctx.restore(); <br /> ctx.save();/ /分針轉動<br /> ctx.fillStyle="blue"; <br /> ctx.lineWidth=; <br /> transform(ctx,x,y,(Math.PI*)/*m,true); <br /> sjj (ctx,x,y,x-,y-,x ,y-); <br /> ctx.restore(); <br /> //秒針轉動<br /> ctx.save(); <br /> ctx.fillStyle ="#"; <br /> transform(ctx,x,y,sAngle,true); <br /> sj(ctx,x,y,x-,y-,x ,y-); <br /> ctx.restore (); <br /> //資料整理<br /> if(s%==){ <br /> sAngle=,s=,m ; <br /> if(m==){ //每十二分針旋轉一次<br /> if(m!=)h ; <br /> if(m%==)m=; <br /> } <br /> if(h%==)h=; <br /> }; <br /> //*註:如果是放到外面判斷分針或時針轉動則滿足條件時都重複會運行原因每執行一遍只有秒針在時刻變動*// <br /> var dateString=time.getFullYear() "年" ( time.getMonth() ) "月" time.getDate() "日" weekday[time.getDay()] " h:" time.getHours() " m:" m " s:" s; <br /> document. getElementById("d").innerHTML=dateString; <br /> } <br /> //指標三角! <br /> function sj(ctx,x,y,x,y,x,y){ <br /> //= ===例==== <br /> // ctx.beginPath(); <br /> // ctx.moveTo(x,y); <br /> // ctx.lineTo(x,y-); <br /> // ctx.stroke(); <br /> // ctx.beginPath(); <br /> // <br /> // ctx.moveTo(x-,y-); <br /> // ctx.lineTo( x ,y-); <br /> // ctx.lineTo(x,y--); <br /> // ctx.fill(); <br /> ctx.beginPath(); <br /> ctx.moveTo(x ,y); <br /> ctx.lineTo(x,y); <br /> ctx.stroke(); <br /> ctx.beginPath(); <br /> ctx.moveTo(x,y); <br /> ctx .lineTo(x,y); <br />ctx.lineTo(x,y); <br /> ctx.fill(); <br /> } <br /> // 座標に従って回転します<br /> function throw(ctx,x,y,angle,b){ <br /> if(b){// 時計回り <br /> ctx.transform(Math.cos(角度), Math.sin(角度), <br /> -Math.sin(角度), Math.cos(角度), <br /> x*(-Math.cos(角度)) x*Math.sin(角度), <br /> y*(-Math.cos(角度)) - y*Math.sin(角度)) <br /> } <br /> } <br /> //======毎秒実行============(実行イベントはオプション) <br /> window.setInterval(function(){draw()}, ) ; <br /> // window.onload=function(){ // 効果は上記と同じです<br /> // setInterval("draw()",) <br /> // <br /> / / ]]> <br />