求大神指教,為什么我的這個只是閃一下就沒了,有顏色的小球并不滾動
var WINDOW_WIDTH=400;//畫布長度
var WINDOW_HEIGHT=300;//畫布高度
var RADIUS=2;//每個數(shù)字中小圓點的半徑
var MARGIN_LEFT=20;//第一個數(shù)字離畫布左邊的距離
var MARGIN_TOP=30;//第一個數(shù)字離畫布上邊的距離
//截止的日期
const endTime=new Date(2015,11,5,18,47,52);
var curShowTimeSeconds=0;
var balls=[];
const colors=["#33b5e5","#0099cc","#aa66cc","#9933cc","#99cc00","#669900","#ffbb33","#ff8800","#ff4444","#cc0000"];
window.onload=function(){
? ?var canvas=document.getElementById('canvas');
? ?//獲取畫布環(huán)境
? ?var context=canvas.getContext('2d');
? ?canvas.width=WINDOW_WIDTH;
? ?canvas.height=WINDOW_HEIGHT;
? ?//獲取此時的時間
? ?curShowTimeSeconds=getCurrentShowTimeSeconds();
? ?//定時器每隔50毫秒執(zhí)行一次程序
? ?setInterval(function(){
? ? ? ?render(context);
? ? ? ?update();
? ?},50);
}
//獲取截止日期到現(xiàn)在日期的差值
function getCurrentShowTimeSeconds(){
? ?var curTime=new Date();
? ?var ret=endTime.getTime()-curTime.getTime();//毫秒
? ?ret=Math.round(ret/1000);//轉(zhuǎn)換成秒
? ?return ret>=0?ret:0;//若差值大于0則返回,若小于0,則返回0
}
function update(){
? ?//執(zhí)行update時再次獲取此時時間
? var ?nextShowTimeSeconds=getCurrentShowTimeSeconds();
? ?var nextHours=parseInt(nextShowTimeSeconds/3600);
? ?var nextMinutes = parseInt((nextShowTimeSeconds-nextHours*3600)/60);
? ?var nextSeconds = nextShowTimeSeconds%60;
? ?//主程序時獲取的時間
? ?var curHour=parseInt(curShowTimeSeconds/3600);
? ?var curMinutes=parseInt((curShowTimeSeconds-curHour*3600)/60);
? ?var curSeconds=curShowTimeSeconds%60;
? ?if(nextSeconds!=curSeconds){//判斷update時的時間和主程序時獲取的現(xiàn)在時間是否一樣,使倒計時轉(zhuǎn)動,并且小球跳動
? ? ? ?if(parseInt(curHour/10)!=parseInt(nextHours/10)){
? ? ? ? ? ?addBalls(MARGIN_LEFT ? ? ? ? ? ? ? ? ? ,MARGIN_TOP,parseInt(curHour/10));
? ? ? ?}
? ? ? ?if(parseInt(curHour%10)!=parseInt(nextHours%10)) {
? ? ? ? ? ?addBalls(MARGIN_LEFT + 15 * (RADIUS + 1), MARGIN_TOP, parseInt(curHour % 10));
? ? ? ?}
? ? ? ?if(parseInt(curMinutes/10)!=parseInt(nextMinutes/10)) {
? ? ? ? ? ?addBalls(MARGIN_LEFT + 39 * (RADIUS + 1), MARGIN_TOP, parseInt(curMinutes / 10));
? ? ? ?}
? ? ? ?if(parseInt(curMinutes%10)!=parseInt(nextMinutes%10)) {
? ? ? ? ? ?addBalls(MARGIN_LEFT + 54 * (RADIUS + 1), MARGIN_TOP, parseInt(curMinutes % 10));
? ? ? ?}
? ? ? ?if(parseInt(curSeconds/10)!=parseInt(nextSeconds/10)) {
? ? ? ? ? ?addBalls(MARGIN_LEFT + 78 * (RADIUS + 1), MARGIN_TOP, parseInt(curSeconds / 10));
? ? ? ?}
? ? ? ?if(parseInt(curSeconds%10)!=parseInt(nextSeconds%10)) {
? ? ? ? ? ?addBalls(MARGIN_LEFT + 93 * (RADIUS + 1), MARGIN_TOP, parseInt(curSeconds % 10));
? ? ? ?}
? ? ? ?curShowTimeSeconds=nextShowTimeSeconds;
? ?}
? ?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.g;
? ? ? ?if(balls[i].y>=WINDOW_HEIGHT-RADIUS){
? ? ? ? ? ?balls[i].y=WINDOW_HEIGHT-RADIUS;
? ? ? ? ? ?balls[i].vy=-balls[i].vy*0.75;
? ? ? ?}
? ?}
}
function addBalls(x,y,num){
? ?for(var i=0;i<lend1[num].length;i++){
? ? ? ?for(var j=0;j<lend1[num][i].length;j++){
? ? ? ? ? ?if(lend1[num][i][j]==1){
? ? ? ? ? ? ? ?var aBall={
? ? ? ? ? ? ? ? ? ?x:x+j*2*(RADIUS+1)+(RADIUS+1),
? ? ? ? ? ? ? ? ? ?y:y+i*2*(RADIUS+1)+(RADIUS+1),
? ? ? ? ? ? ? ? ? ?g:0.5+Math.random(),
? ? ? ? ? ? ? ? ? ?vx:Math.pow(-1,Math.ceil(Math.random()*1000))*2,
? ? ? ? ? ? ? ? ? ?vy:-5,
? ? ? ? ? ? ? ? ? ?color:colors[Math.floor(Math.random()*colors.length)]
? ? ? ? ? ? ? ?};
? ? ? ? ? ? ? ?balls.push(aBall);
? ? ? ? ? ?}
? ? ? ?}
? ?}
}
//畫出此刻離截止日期的時間
function render(cxt){
? ?//清除前一次的圖形
? ?cxt.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
? ?//截止的小時
? ?var hour=parseInt(curShowTimeSeconds/3600);
? ?//截止的分鐘
? ?var minutes=parseInt((curShowTimeSeconds-hour*3600)/60);
? ?//截止的分鐘
? ?var seconds=curShowTimeSeconds%60;
? ?renderDigit(MARGIN_LEFT,MARGIN_TOP,parseInt(hour/10),cxt);
? ?renderDigit(MARGIN_LEFT+15*(RADIUS+1),MARGIN_TOP,parseInt(hour%10),cxt);
? ?renderDigit(MARGIN_LEFT+30*(RADIUS+1),MARGIN_TOP,10,cxt);
? ?renderDigit(MARGIN_LEFT+39*(RADIUS+1),MARGIN_TOP,parseInt(minutes/10),cxt);
? ?renderDigit(MARGIN_LEFT+54*(RADIUS+1),MARGIN_TOP,parseInt(minutes%10),cxt);
? ?renderDigit(MARGIN_LEFT+69*(RADIUS+1),MARGIN_TOP,10,cxt);
? ?renderDigit(MARGIN_LEFT+78*(RADIUS+1),MARGIN_TOP,parseInt(seconds/10),cxt);
? ?renderDigit(MARGIN_LEFT+93*(RADIUS+1),MARGIN_TOP,parseInt(seconds%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,RADIUS,0,2*Math.PI,true);
? ? ? ?cxt.closePath();
? ? ? ?cxt.fill();
? ?}
}
//畫出每個數(shù)字
function renderDigit(x,y,num,cxt){
? ?//圓點的顏色
? ?cxt.fillStyle="rgb(0,102,153)";
? ?//對lend1進行遍歷,i是每個數(shù)字的行數(shù),j是沒個數(shù)字的列數(shù)
? ?for(var i=0;i<lend1[num].length;i++){
? ? ? ?for(var j=0;j<lend1[num][i].length;j++){
? ? ? ? ?if(lend1[num][i][j]==1){
? ? ? ? ? ? ?cxt.beginPath();
? ? ? ? ? ? ?cxt.arc(x+j*2*(RADIUS+1)+(RADIUS+1),y+i*2*(RADIUS+1)+(RADIUS+1),RADIUS,0,2*Math.PI);
? ? ? ? ? ? ?cxt.closePath();
? ? ? ? ? ? ?cxt.fill();
? ? ? ? ?}
? ? ? ?}
? ?}
}
2016-01-24
哎,我的也不動