改了一晚上也不知道哪里错了。。。

来源:4-3 华丽的小球滚动效果

Adorrable坛子

2015-07-22 20:45

var window_width=1024;
var window_height=768;
var radius=8;
var margin_left=30;
var margin_top=60;
const endTime=new Date(2015,6,23,20,0,0);
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');
    var context=canvas.getContext("2d");

    canvas.width = window_width;
    canvas.height = window_height;

    curShowTimeSeconds=getCurrentShowTimeSeconds();
    setInterval(
    function(){
        render( context );
        update();
    }
        ,
        50
    )

};
function getCurrentShowTimeSeconds(){
    var cueTime= new Date();
    var ret=endTime.getTime() - cueTime.getTime();
    ret=Math.round(ret/1000);
    return ret >=0 ? ret :0 ;
}

function update(){

    var nextShowTimeSeconds = getCurrentShowTimeSeconds();

    var nextHours = parseInt( nextShowTimeSeconds / 3600)
    var nextMinutes = parseInt( (nextShowTimeSeconds - nextHours * 3600)/60 )
    var nextSeconds = nextShowTimeSeconds % 60

    var curHours = parseInt( curShowTimeSeconds / 3600)
    var curMinutes = parseInt( (curShowTimeSeconds - curHours * 3600)/60 )
    var curSeconds = curShowTimeSeconds % 60

    if( nextSeconds != curSeconds ){
        if(parseInt(curHours/10)!=parseInt(nextHours/10))
        {
            addBalls(Margin_left+0,Margin_top,parseInt(curHours/10));
        }
        if(parseInt(curHours%10)!=parseInt(nextHours%10))
        {
            addBalls(Margin_left+15*(radius+1),Margin_top,parseInt(curHours/10));
        }
        if(parseInt(curMinutes/10)!=parseInt(nextMinutes/10)){
            addBalls(Margin_left+39*(radius+1),Margin_top,parseInt(curHours/10));
        }
        if(parseInt(curMinutes%10)!=parseInt(nextMinutes%10)){
            addBalls(Margin_left+54*(radius+1),Margin_top,parseInt(curHours%10));
        }
        if(parseInt(curSeconds/10)!=parseInt(nextSeconds/10)){
            addBalls(Margin_left+69*(radius+1),Margin_top,parseInt(curHours/10));
        }
        if(parseInt(curSeconds%10)!=parseInt(nextSeconds%10)) {
            addBalls(Margin_left + 93*(radius+1), Margin_top, parseInt(curHours % 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[i].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 < 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 * (radius + 1) + (radius + 1),
                    y: y + i * 2 * (radius + 1) + (radius + 1),
                    g: 1.5 + Math.random(),
                    vx: Math.pow(-1, Math.ceil(Math.random() * 1000)) * 4,
                    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 hours = parseInt(curShowTimeSeconds / 3600);
        var minutes = parseInt((curShowTimeSeconds - hours * 3600) / 60);
        var seconds = parseInt(curShowTimeSeconds - hours * 3600 - minutes * 60);//curShowTimeSeconds%60
        renderDigit(margin_left, margin_top, parseInt(hours / 10), cxt);
        renderDigit(margin_left + 15 * (radius + 1), margin_top, parseInt(hours % 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();
        }


    }

    function renderDigit(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 * (radius + 1) + (radius + 1), y + i * 2 * (radius + 1) + (radius + 1), radius, 0, 2 * Math.PI);
                    cxt.closePath();
                    cxt.fill()
                }


}

找错误的时候真的是要爆炸了,老师能不能推荐一种好的工具?

写回答 关注

2回答

  • lx1024ly
    2015-07-22 21:18:57

    25  26行

    犇犇大卵 回复Adorra...

    习惯驼峰标记法就不会出现命名错误了

    2015-10-09 08:46:59

    共 2 条回复 >

  • 部落勇者QAQ
    2015-07-22 20:59:07

    只是路过 不过你好牛啊 我还只是学生

     

    Adorra...

    额。。都是跟着视频里敲的。。。

    2015-07-23 09:53:20

    共 1 条回复 >

炫丽的倒计时效果Canvas绘图与动画基础

学习HTML5中最激动人心的技术Canvas,彻底释放自己的创造力

96746 学习 · 1000 问题

查看课程

相似问题