歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> HTML5-炫麗的時鐘效果Canvas繪圖與動畫基礎練習

HTML5-炫麗的時鐘效果Canvas繪圖與動畫基礎練習

日期:2017/3/1 9:30:51   编辑:Linux編程

HTML5-炫麗的時鐘效果Canvas繪圖與動畫基礎練習

效果如下:http://www.linuxidc.com/yanshi/2015/03/Canvas/index.html

全部代碼:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML5-炫麗的時鐘效果Canvas繪圖與動畫 - Linux公社 www.linuxidc.com</title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<canvas id="canvas"></canvas>
</body>
</html>
<script type="text/javascript" src="digit.js"></script>
<script type="text/javascript">
var WINDOW_WIDTH=1024;
var WINDOW_HEIGHT=600;
var MARGIN_TOP=60;
var MARGIN_LEFT=30;
//存放彩色小球
var balls=[];
const colors=["#33B5E5","#0099CC","#AA66CC","#669900","#FFBB33","#FF8800","#FF4444","CC0000"];

var r=8;//圓半徑

window.onload=function(){

var canvas=document.getElementById("canvas");

var context=canvas.getContext("2d");

canvas.width=WINDOW_WIDTH;

canvas.height=WINDOW_HEIGHT;

window.setInterval(function(){

var curr=new Date();

var curHours=curr.getHours();

var curMinutes=curr.getMinutes();

var curSeconds=curr.getSeconds();

//當時間的秒數改變時添加彩色小球

if(preSeconds!=curSeconds)

{

if(parseInt(curHours/10)!=parseInt(preHours/10)){

addBall(MARGIN_LEFT,MARGIN_TOP,parseInt(curHours/10));

}

if(parseInt(curHours%10)!=parseInt(preHours%10)){

addBall(MARGIN_LEFT+15*(r+1),MARGIN_TOP,parseInt(curHours%10));

}

if(parseInt(curMinutes/10)!=parseInt(preMinutes/10)){

addBall(MARGIN_LEFT+39*(r+1),MARGIN_TOP,parseInt(curMinutes/10));

}

if(parseInt(curMinutes%10)!=parseInt(preMinutes%10)){

addBall(MARGIN_LEFT+54*(r+1),MARGIN_TOP,parseInt(curMinutes%10));

}

if(parseInt(curSeconds/10)!=parseInt(preSeconds/10)){

addBall(MARGIN_LEFT+78*(r+1),MARGIN_TOP,parseInt(curSeconds/10));

}

if(parseInt(curSeconds%10)!=parseInt(preSeconds%10)){

addBall(MARGIN_LEFT+93*(r+1),MARGIN_TOP,parseInt(curSeconds%10));

}

}

render(context);

},50);

}

//添加小球(數字num上的彩色小球,x,y:數字方塊容器的左上角頂點坐標)

function addBall(x,y,num){

for (var i=0;i<digit[num].length ;i++ )

{

for (var j=0;j<digit[num][i].length ;j++ )

{

if(digit[num][i][j]==1){

var ball={

x:x+j*2*(r+1)+r+1,

y:y+i*2*(r+1)+r+1,

g:1.5+Math.random(),

vx:Math.pow(-1,Math.ceil(Math.random()*1000))*4,//結果為-4/4

vy:-5,

color:colors[Math.floor(Math.random()*colors.length)]

};

balls.push(ball);

}

}

}

}

//----畫彩色小球

function renderBalls(context){

//context.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT)

for (var i=0;i<balls.length ;i++ )

{

context.beginPath();

context.arc(balls[i].x,balls[i].y,r,0,2*Math.PI,false);

context.fillStyle=balls[i].color;

context.fill();

context.closePath();

}

}

//----更新彩色小球位置

function UpdateBalls(){

for (var i=0;i<balls.length ;i++ )

{

balls[i].x+=balls[i].vx;

balls[i].y+=balls[i].vy;

balls[i].vy+=balls[i].g;

if(balls[i].y+r>=WINDOW_HEIGHT){

balls[i].y=WINDOW_HEIGHT-r;

balls[i].vy=-balls[i].vy*0.6;

}

}

}

var preHours;

var preMinutes;

var preSeconds;

//渲染整個畫布

function render(context)

{

context.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT)

var now=new Date();

var hours=now.getHours();

var minutes=now.getMinutes();

var seconds=now.getSeconds();

preHours=hours;

preMinutes=minutes;

preSeconds=seconds;

//---時

renderDigit(MARGIN_LEFT,MARGIN_TOP,parseInt(hours/10),context);

renderDigit(MARGIN_LEFT+15*(r+1),MARGIN_TOP,hours%10,context);

renderDigit(MARGIN_LEFT+30*(r+1),MARGIN_TOP,10,context);

//---分

renderDigit(MARGIN_LEFT+39*(r+1),MARGIN_TOP,parseInt(minutes/10),context);

renderDigit(MARGIN_LEFT+54*(r+1),MARGIN_TOP,minutes%10,context);

renderDigit(MARGIN_LEFT+69*(r+1),MARGIN_TOP,10,context);

//---秒

renderDigit(MARGIN_LEFT+78*(r+1),MARGIN_TOP,parseInt(seconds/10),context);

renderDigit(MARGIN_LEFT+93*(r+1),MARGIN_TOP,seconds%10,context);

//---畫小球

renderBalls(context);

//---改變小球路徑

UpdateBalls();

}

//渲染每個數字

function renderDigit(x,y,num,context)

{

context.fill;

for (var i=0;i<digit[num].length ; i++)

{

for (var j=0;j<digit[num][i].length ;j++ )

{

if(digit[num][i][j]==1){

context.beginPath();

context.arc(x+j*2*(r+1)+r+1,y+i*2*(r+1)+r+1,r,0,2*Math.PI,false);

context.closePath();

context.fill();

}

}

}

}

</script>

數字的結構定義:digit.js


digit =

[

[

[0,0,1,1,1,0,0],

[0,1,1,0,1,1,0],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,0,1,1,0],

[0,0,1,1,1,0,0]

],//0

[

[0,0,0,1,1,0,0],

[0,1,1,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[1,1,1,1,1,1,1]

],//1

[

[0,1,1,1,1,1,0],

[1,1,0,0,0,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,1,1,0],

[0,0,0,1,1,0,0],

[0,0,1,1,0,0,0],

[0,1,1,0,0,0,0],

[1,1,0,0,0,0,0],

[1,1,0,0,0,1,1],

[1,1,1,1,1,1,1]

],//2

[

[1,1,1,1,1,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,1,1,0],

[0,0,0,1,1,0,0],

[0,0,1,1,1,0,0],

[0,0,0,0,1,1,0],

[0,0,0,0,0,1,1],

[0,0,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,1,1,0]

],//3

[

[0,0,0,0,1,1,0],

[0,0,0,1,1,1,0],

[0,0,1,1,1,1,0],

[0,1,1,0,1,1,0],

[1,1,0,0,1,1,0],

[1,1,1,1,1,1,1],

[0,0,0,0,1,1,0],

[0,0,0,0,1,1,0],

[0,0,0,0,1,1,0],

[0,0,0,1,1,1,1]

],//4

[

[1,1,1,1,1,1,1],

[1,1,0,0,0,0,0],

[1,1,0,0,0,0,0],

[1,1,1,1,1,1,0],

[0,0,0,0,0,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,1,1,0]

],//5

[

[0,0,0,0,1,1,0],

[0,0,1,1,0,0,0],

[0,1,1,0,0,0,0],

[1,1,0,0,0,0,0],

[1,1,0,1,1,1,0],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,1,1,0]

],//6

[

[1,1,1,1,1,1,1],

[1,1,0,0,0,1,1],

[0,0,0,0,1,1,0],

[0,0,0,0,1,1,0],

[0,0,0,1,1,0,0],

[0,0,0,1,1,0,0],

[0,0,1,1,0,0,0],

[0,0,1,1,0,0,0],

[0,0,1,1,0,0,0],

[0,0,1,1,0,0,0]

],//7

[

[0,1,1,1,1,1,0],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,1,1,0],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,1,1,0]

],//8

[

[0,1,1,1,1,1,0],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[1,1,0,0,0,1,1],

[0,1,1,1,0,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,0,1,1],

[0,0,0,0,1,1,0],

[0,0,0,1,1,0,0],

[0,1,1,0,0,0,0]

],//9

[

[0,0,0,0],

[0,0,0,0],

[0,1,1,0],

[0,1,1,0],

[0,0,0,0],

[0,0,0,0],

[0,1,1,0],

[0,1,1,0],

[0,0,0,0],

[0,0,0,0]

]//:

];

--------------------------------------分割線 --------------------------------------

HTML5 地理位置定位(HTML5 Geolocation)原理及應用 http://www.linuxidc.com/Linux/2012-07/65129.htm

HTML5移動開發即學即用(雙色) PDF+源碼 http://www.linuxidc.com/Linux/2013-09/90351.htm

HTML5入門學習筆記 http://www.linuxidc.com/Linux/2013-09/90089.htm

HTML5移動Web開發筆記 http://www.linuxidc.com/Linux/2013-09/90088.htm

HTML5 開發中的本地存儲的安全風險 http://www.linuxidc.com/Linux/2013-06/86486.htm

《HTML5與CSS3權威指南》及相配套源碼 http://www.linuxidc.com/Linux/2013-02/79950.htm

關於 HTML5 令人激動的 10 項預測 http://www.linuxidc.com/Linux/2013-02/79917.htm

HTML5與CSS3實戰指南 PDF http://www.linuxidc.com/Linux/2013-02/79910.htm

--------------------------------------分割線 --------------------------------------

Copyright © Linux教程網 All Rights Reserved