最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法

 更新時間:2021年10月12日 11:06:37   作者:tcxu  
這篇文章主要介紹了js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法,涉及html5圖形繪制的基礎(chǔ)技巧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例講述了js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法,畫的是一個可用于網(wǎng)頁的、帶擺的鐘表,可以通過按鈕調(diào)整其大小和位置,具體實現(xiàn)內(nèi)容如下

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Clock</title>
<script type="text/javascript"> 
var xClock=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); //置坐標(biāo)軸原點于表心
 c=document.getElementById("myPendulum");
 g2d=c.getContext("2d"); 
g2d.translate(-1,0); //置坐標(biāo)軸原點于表心
 
}
function eastwards(){
var c=document.getElementById("myCanvas");
var g2d=c.getContext("2d"); 
g2d.translate(1,0); //置坐標(biāo)軸原點于表心
 c=document.getElementById("myPendulum");
 g2d=c.getContext("2d"); 
g2d.translate(1,0); //置坐標(biāo)軸原點于表心
}
function upwards(){
var c=document.getElementById("myCanvas");
var g2d=c.getContext("2d"); 
g2d.translate(0,-1); //置坐標(biāo)軸原點于表心
 c=document.getElementById("myPendulum");
 g2d=c.getContext("2d"); 
g2d.translate(0,-1); //置坐標(biāo)軸原點于表心
}
function downwards(){
var c=document.getElementById("myCanvas");
var g2d=c.getContext("2d"); 
g2d.translate(0,1); //置坐標(biāo)軸原點于表心
 c=document.getElementById("myPendulum");
 g2d=c.getContext("2d"); 
g2d.translate(0,1); //置坐標(biāo)軸原點于表心
}
 
 
function fillPolygon( a, b, fillColor, ctx){
ctx.beginPath();
ctx.moveTo(a[0],b[0]);
for (var j=1;j<a.length;j++)
ctx.lineTo(a[j],b[j]);
ctx.closePath();
ctx.fillStyle=fillColor;
ctx.fill();
}
 
function randomColor(){ 
var s ="#";
for (var i=0;i<3;i++)
s += 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); //置坐標(biāo)軸原點于表心
var c=document.getElementById("myPendulum");
var g2d=c.getContext("2d"); 
g2d.translate(xClock,yClock); //置坐標(biāo)軸原點于表心
}
 
function drawFace(){ //定義畫鐘表表面drawFace方法
/* 表示1,2,4,5,7,8,10,11點鐘位置的較小尺寸的菱形標(biāo)志頂點坐標(biāo)數(shù)組 */
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點鐘位置的較大尺寸的菱形標(biāo)志頂點坐標(biāo)數(shù)組 */
var x1= new Array(0,Math.round(d/15),0,Math.round(-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");
 //下面開始 準(zhǔn)備畫鐘表圓面邊
 g2d.beginPath();
 g2d.arc(0,0,d, 0 , 2*Math.PI);
 g2d.strokeStyle="lightGray";
 g2d.lineWidth=d/18;
 g2d.stroke(); //最后一筆,畫鐘表圓面邊
 
 //下面開始準(zhǔn)備畫表示 每個鐘點 的菱形
 for (var i=0;i<12;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);
 }
//以鐘表表心為原點,坐標(biāo)系順時針轉(zhuǎn)動30度,以便畫下一個鐘點位置的菱形標(biāo)記
 g2d.rotate(Math.PI/6.0); 
 }//for 循環(huán)語句的循環(huán)體結(jié)束
}//畫鐘表表面 drawFace 方法結(jié)束
 
/* 定義畫鐘表的時針、分針、和秒針的方法 drawNeedles
* 形參 Hradian,單位弧度, 為時針從0點算起的弧度位置,
* 形參 Mradian,單位弧度, 為分針從0分算起的弧度位置,
* 形參 Sradian,單位弧度, 為秒針從0秒算起的弧度位置。*/
function drawNeedles( Hradian, Mradian, Sradian ){
var c=document.getElementById("myCanvas");
var g2d=c.getContext("2d");
//以鐘表表心為原點,坐標(biāo)系順時針轉(zhuǎn)動Hradian弧度,以便畫出時針
 g2d.rotate(Hradian); 
 //表示時針的多邊形頂點的坐標(biāo)數(shù)組
var Hx =new Array(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);//時針設(shè)為紫紅色,
//以鐘表表心為原點,坐標(biāo)系逆時針轉(zhuǎn)動Hradian弧度,以還原坐標(biāo)系
 g2d.rotate(-Hradian); 
 
//以鐘表表心為原點,坐標(biāo)系順時針轉(zhuǎn)動Mradian弧度,以便畫出分針 
 g2d.rotate(Mradian);
//表示分針的多邊形頂點的坐標(biāo)數(shù)組
var 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); //分針設(shè)為灰色
//以鐘表表心為原點,坐標(biāo)系逆時針轉(zhuǎn)動Mradian弧度,以還原坐標(biāo)系
 g2d.rotate(-Mradian);
 
//以鐘表表心為原點,坐標(biāo)系順時針轉(zhuǎn)動Sradian弧度,以便畫出秒針 
 g2d.rotate(Sradian);
 // 秒針設(shè)為隨機(jī)顏色 
 g2d.strokeStyle='green';
 g2d.lineWidth="1";
 g2d.moveTo(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(); //最后一筆,畫秒針頂點的小球
//以鐘表表心為原點,坐標(biāo)系逆時針轉(zhuǎn)動Sradian弧度,以還原坐標(biāo)系
 g2d.rotate(-Sradian); 
} //畫表針方法 drawNeedles的代碼塊結(jié)束 
 
/* 畫出字符串來表示瞬時時間 */
function DrawTime() {
 var time=new Date(); //獲取當(dāng)前時間。
 var hour=time.getHours(); //獲取小時
 var minute=time.getMinutes();//獲取分鐘
 var second=time.getSeconds();//獲取秒數(shù)
 
 var apm="AM"; //默認(rèn)顯示上午:AM.
 var canvas =document.getElementById("myCanvas"); 
 var g2d =canvas.getContext("2d"); 
 if(hour>12){
 //按照12小時制止顯示
 hour=hour-12;
 apm="PM";
 }
 if(minute<10){
 //如果分鐘只有1位,補0顯示
 minute="0"+minute;
 }
 if(second<10){ //如果秒數(shù)只有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.createLinearGradient(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("大數(shù)據(jù)",-d/2.6,d/2);
//獲得實例創(chuàng)建瞬間的秒讀數(shù),由此計算出秒針,相對于0 秒,走過的弧讀數(shù)
var c = Math.PI/30 * second; 
//獲得創(chuàng)建瞬間的的分鐘讀數(shù),由此計算出分針,相對于0 分,走過的弧讀數(shù)
var b = Math.PI/30 * minute;
/* 獲得創(chuàng)建瞬間的的鐘點讀數(shù),由此計算出時針,相對于0 點,走過的弧讀數(shù)。
 * 時針走過的弧度為整點的度數(shù)(每小時走30度),加上走過分鐘數(shù)的修正值 */
var a = Math.PI/180*(30 * hour + minute/2);
/* 坐標(biāo)系平移 (xClock,yClock) ,使得坐標(biāo)軸成為表盤中心 */
 drawFace();
 drawNeedles( a, b, c); 
 } // 方法 DrawTime 的代碼塊結(jié)束
 
 var i=0;
function pendulum() { //pendulum_bob
var instantAngle = 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); //擺的即時角度數(shù)組
var c=document.getElementById("myPendulum");
var ctx=c.getContext("2d");
var alpha=instantAngle[i++%instantAngle.length]*Math.PI/180;
ctx.clearRect(-300,-300,900,900);
ctx.rotate(alpha);
 // 秒針設(shè)為隨機(jī)顏色 
 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.addColorStop("0","magenta");
gradient.addColorStop("0.5","blue");
gradient.addColorStop("1.0","white");
// Fill with gradient
//ctx.fillStyle=gradient;
ctx.fillStyle="red";
 
ctx.fillText("大數(shù)據(jù)",-d/3.2,d*1.55);
ctx.shadowBlur=0;
ctx.shadowColor=null;
ctx.fillStyle=null;
ctx.rotate(-alpha);
 
}
 
 
function preparation(){
 locateCoordinate()
 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:#6C0;
}
</style>
</head>
<body onLoad="preparation()">
<canvas id="myCanvas" width="600" height="600" > 
  <p>Your browserdoes not support the canvas element!</p> 
</canvas>
<canvas id="myPendulum" width="600" height="600" > 
  <p>Your browserdoes not support the canvas element!</p> 
</canvas>
<div id="controlPanel">
<table>
<tr><td>控制</td><td>按鈕</td></tr>
<tr><td><input value="增大" type="button" onclick="enlarge()"></button></td>
<td><input value="縮小" type="button" onclick="reduce()"></button></td></tr>
 
<tr><td><input value="左移" type="button" onclick="westwards()"></button></td>
<td><input value="右移" type="button" onclick="eastwards()"></button></td></tr>
 
<tr><td><input value="上移" type="button" onclick="upwards()"></button></td>
<td><input value="下移" type="button" onclick="downwards()"></button></td>
</tr>
</table>
 
</div>
</body>
</html>

效果圖:

希望本文所述對大家的web程序設(shè)計有所幫助。

相關(guān)文章

  • uni-app如何實現(xiàn)增量更新功能

    uni-app如何實現(xiàn)增量更新功能

    這篇文章主要介紹了uni-app如何實現(xiàn)增量更新功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • JS實現(xiàn)復(fù)制功能

    JS實現(xiàn)復(fù)制功能

    本文主要介紹了JS實現(xiàn)復(fù)制功能的實例,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Redux中進(jìn)行異步操作(網(wǎng)絡(luò)請求)的示例方案

    Redux中進(jìn)行異步操作(網(wǎng)絡(luò)請求)的示例方案

    這篇文章主要介紹了Redux中進(jìn)行異步操作(網(wǎng)絡(luò)請求)的方案,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • js中創(chuàng)建對象的幾種方式

    js中創(chuàng)建對象的幾種方式

    本文主要介紹了js中創(chuàng)建對象的幾種方式。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • js基礎(chǔ)之事件捕獲與冒泡原理

    js基礎(chǔ)之事件捕獲與冒泡原理

    這篇文章主要為大家詳細(xì)介紹了js基礎(chǔ)之事件捕獲與冒泡原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 微信公眾號網(wǎng)頁授權(quán)登錄的超簡單實現(xiàn)步驟

    微信公眾號網(wǎng)頁授權(quán)登錄的超簡單實現(xiàn)步驟

    微信開放平臺為第三方移動程序提供分享、傳播的接口,使用戶可將第三方程序的內(nèi)容發(fā)布給好友或分享至朋友圈,下面這篇文章主要給大家介紹了關(guān)于微信公眾號網(wǎng)頁授權(quán)登錄的超簡單實現(xiàn)方法,需要的朋友可以參考下
    2022-06-06
  • JS removeAttribute()方法實現(xiàn)刪除元素的某個屬性

    JS removeAttribute()方法實現(xiàn)刪除元素的某個屬性

    這篇文章主要介紹了JS removeAttribute()方法實現(xiàn)刪除元素的某個屬性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 用js獲取點擊圖片的值!

    用js獲取點擊圖片的值!

    用js獲取點擊圖片的值!...
    2007-07-07
  • javascript定義變量時帶var與不帶var的區(qū)別分析

    javascript定義變量時帶var與不帶var的區(qū)別分析

    這篇文章主要介紹了javascript定義變量時帶var與不帶var的區(qū)別,以一個簡單實例分析了變量定義時帶var與不帶var的執(zhí)行原理及用法區(qū)別,需要的朋友可以參考下
    2015-01-01
  • JS實現(xiàn)從頂部下拉顯示的帶動畫QQ客服特效代碼

    JS實現(xiàn)從頂部下拉顯示的帶動畫QQ客服特效代碼

    這篇文章主要介紹了JS實現(xiàn)從頂部下拉顯示的帶動畫QQ客服特效代碼,可實現(xiàn)彈性緩沖效果的彈出QQ客服窗口的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10

最新評論

东城区| 叙永县| 长葛市| 株洲市| 滕州市| 永寿县| 湘潭县| 七台河市| 洪江市| 睢宁县| 淳安县| 咸丰县| 罗田县| 老河口市| 巫溪县| 寿光市| 祥云县| 南投市| 平安县| 宜城市| 瑞昌市| 隆昌县| 盐山县| 琼海市| 化隆| 韶关市| 黄大仙区| 宜阳县| 汉中市| 定襄县| 新昌县| 忻城县| 合山市| 望奎县| 满城县| 永登县| 平定县| 东源县| 青神县| 武宣县| 剑河县|