HTML5 canvas 计时器
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body >
<canvas id="canvas" style="display:block;margin:50px auto;">
当前浏览器不支持Canvas,请更换浏览器后再试
</canvas>
<script src="js/digit.js"></script>
<script src="js/countdown.js"></script>
</body>
</html>
js部分
var rr=7;
var wid_width=1024;
var wid_height=500;
var mgl=60;
var mgt=30;
var curt=0;
var balls=[];
const colors=["#669900","#FFBB33","#FF8800","#FF4444"]
window.onload=function(){
var cvs=document.getElementById('canvas');
var cont=cvs.getContext('2d');
cvs.width=wid_width;
cvs.height=wid_height;
curt=getcurt();
setInterval(function(){
render(cont);
update();
},
50)
}
function getcurt(){
var gct=new Date();
var ret = gct.getHours()*3600+gct.getMinutes()*60+gct.getSeconds();
return ret;
}
function update(){
var nxt=getcurt();
var nxh=parseInt(nxt/3600);
var nxm=parseInt((nxt-nxh*3600)/60);
var nxs=parseInt(nxt%60);
var crh=parseInt(curt/3600);
var crm=parseInt((curt-crh*3600)/60);
var crs=parseInt(curt%60);
if(nxs!=crs){
if(parseInt(nxh/10)!=parseInt(crh/10)){
addballs(mgl,mgt,parseInt(crh/10));
}
if(parseInt(nxh%10)!=parseInt(crh%10)){
addballs(mgl+15*(rr+1),mgt,parseInt(crh%10));
}
if(parseInt(nxm/10)!=parseInt(crm/10)){
addballs(mgl+39*(rr+1),mgt,parseInt(crm/10));
}
if(parseInt(nxm%10)!=parseInt(crm%10)){
addballs(mgl+54*(rr+1),mgt,parseInt(crm%10));
}
if(parseInt(nxs/10)!=parseInt(crs/10)){
addballs(mgl+78*(rr+1),mgt,parseInt(crs/10));
}
if(parseInt(nxs%10)!=parseInt(crs%10)){
addballs(mgl+93*(rr+1),mgt,parseInt(crs%10));
}
curt=nxt;
}
updateballs();
}
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(wid_height-rr<=balls[i].y){
balls[i].y=wid_height-rr
balls[i].vy=-balls[i].vy*0.7
}
}
var xs=0;
for(var j=0;j<balls.length;j++){
if(balls[j].x+rr>0 && balls[j].x-rr<wid_width){
balls[xs++] = balls[j];
}
}
while(balls.length>xs){
balls.pop();
}
}
function addballs(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 aball={
x:x+j*2*(rr+1)+(rr+1),
y:y+i*2*(rr+1)+(rr+1),
g:1.5+Math.random(),
vx:Math.pow(-1,Math.ceil(Math.random()*1000))*4,
vy:-5,
color:colors[Math.floor(Math.random()*4)]
}
balls.push(aball);
}
}
}
}
function render(cxt){
cxt.clearRect(0,0,wid_width,wid_height)
var curh=parseInt(curt/3600);
var curm=parseInt((curt-curh*3600)/60);
var curs=parseInt(curt%60);
readigit(mgl,mgt,parseInt(curh/10),cxt);
readigit(mgl+15*(rr+1),mgt,parseInt(curh%10),cxt);
readigit(mgl+30*(rr+1),mgt,10,cxt);
readigit(mgl+39*(rr+1),mgt,parseInt(curm/10),cxt);
readigit(mgl+54*(rr+1),mgt,parseInt(curm%10),cxt);
readigit(mgl+69*(rr+1),mgt,10,cxt);
readigit(mgl+78*(rr+1),mgt,parseInt(curs/10),cxt);
readigit(mgl+93*(rr+1),mgt,parseInt(curs%10),cxt);
for(var i=0;i<balls.length;i++){
cxt.fillStyle=balls[i].color;
cxt.beginPath();
cxt.arc(balls[i].x,balls[i].y,rr,0,2*Math.PI,true);
cxt.closePath();
cxt.fill();
}
}
function readigit(x,y,num,cxt){
cxt.fillStyle = "rgb(0,102,153)";
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){
cxt.beginPath();
cxt.arc(x+j*2*(rr+1)+(rr+1),y+i*2*(rr+1)+(rr+1),rr,0,2*Math.PI)
cxt.closePath()
cxt.fill()
}
}
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]
]//:
];

浙公网安备 33010602011771号