首页 / 操作系统 / Linux / HTML5-炫丽的时钟效果Canvas绘图与动画基础练习
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.fillStyle="green"; 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.htmHTML5移动开发即学即用(双色) PDF+源码 http://www.linuxidc.com/Linux/2013-09/90351.htmHTML5入门学习笔记 http://www.linuxidc.com/Linux/2013-09/90089.htmHTML5移动Web开发笔记 http://www.linuxidc.com/Linux/2013-09/90088.htmHTML5 开发中的本地存储的安全风险 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.htmHTML5与CSS3实战指南 PDF http://www.linuxidc.com/Linux/2013-02/79910.htm--------------------------------------分割线 --------------------------------------本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-03/115109.htm