diff options
Diffstat (limited to 'toj/jcs/home.js')
-rw-r--r-- | toj/jcs/home.js | 433 |
1 files changed, 433 insertions, 0 deletions
diff --git a/toj/jcs/home.js b/toj/jcs/home.js new file mode 100644 index 0000000..bdc509d --- /dev/null +++ b/toj/jcs/home.js @@ -0,0 +1,433 @@ +var home = { + init:function(){ + home.home_page = new class_home_page; + home.none_page = new class_none_page; + } +}; + +var class_home_page = function(){ + var that = this; + var j_page = $($('#index_page > [page="home"]')[0]); + + that.__super(); + + that.urlchange = function(direct){ + if(direct == 'in'){ + that.fadein(j_page); + index.settitle('Taiwan Online Judge'); + tmp(); + }else if(direct == 'out'){ + that.fadeout(j_page); + tmp_stop = true; + } + } + common.addpage('home',that); + + + var tmp_stop = true; + var tmp_first = true; + + var load; + var prog = 0; + var bd = Math.PI / 180; + + var co_table = [ + '255,255,0', + '255,0,255', + '255,255,0', + '255,255,255', + '17,50,133', + '203,27,69', + '233,139,42', + '186,145,50', + '123,162,63', + '27,129,62', + '0,170,144', + '0,137,167', + '0,92,175', + '203,64,66', + '233,205,76', + '232,48,21', + '255,196,8' + ]; + + var st; + var et; + var pa_off = 0; + var pa_c = 6; + var pa_co = 0; + var pb_off = 0; + var pb_c = 6; + var pb_co = 0; + + function tmp(){ + var e_ani; + var e_canvas; + var ctx; + var e_audio; + + function drawTextAlongArc(context,str,centerX,centerY,radius,angle,offangle) { + var len = str.length, s; + context.save(); + context.translate(centerX,centerY); + context.rotate(-1 * offangle); + context.rotate(-1 * angle / 2); + context.rotate(-1 * (angle / len) / 2); + for(var n = 0; n < len; n++) { + context.rotate(angle / len); + context.save(); + context.translate(0, -1 * radius); + s = str[n]; + context.fillText(s,0,0); + context.restore(); + } + context.restore(); + } + function drawRect(ctx,x,y,w,h){ + ctx.beginPath(); + ctx.rect(x,y,w,h); + ctx.fill(); + } + function drawCircle(ctx,x,y,r,a,off){ + ctx.beginPath(); + ctx.arc(x,y,r,off,a + off,false); + ctx.stroke(); + } + function drawLine(ctx,ax,ay,bx,by){ + ctx.beginPath(); + ctx.moveTo(ax,ay); + ctx.lineTo(bx,by); + ctx.stroke(); + } + function drawPoly(ctx,x,y,r,c,offangle){ + var i; + + ctx.save(); + ctx.beginPath(); + ctx.translate(x,y); + ctx.rotate(-1 * offangle); + ctx.moveTo(0,-r); + for(i = 1;i <= c;i++){ + ctx.rotate(bd * 360 / c); + ctx.lineTo(0,-r); + } + ctx.stroke(); + ctx.restore(); + } + + var ani = function(){ + var i; + var u,v; + + if(tmp_stop == true){ + return; + } + + et = new Date().getTime(); + if((et - st) < 20){ + window.requestAnimationFrame(ani); + return; + } + ctx.clearRect(0,0,1920,1080); + + ctx.fillStyle = 'rgba(128,128,128,1)'; + ctx.shadowBlur = 0; + + ctx.strokeStyle = 'rgba(30,30,30,1)'; + ctx.lineWidth = 2; + u = 3000 - (prog % 240) / 240 * 3000; + for(i = 0;i < 12;i++){ + v = (u + i * 250) % 3000; + drawLine(ctx,v - 540,-5,v - 1040,1085); + } + ctx.strokeStyle = 'rgba(30,30,30,1)'; + ctx.lineWidth = 2; + u = 2500 - (prog % 240) / 240 * 2500; + for(i = 0;i < 10;i++){ + v = (u + i * 250) % 2500; + drawLine(ctx,-5,v - 1250,1925,v - 540); + } + + ctx.strokeStyle = 'rgba(128,128,128,1)'; + + ctx.lineWidth = 12; + drawCircle(ctx,700,500,550,bd * 30,-bd * (prog % 360)); + drawCircle(ctx,700,500,550,bd * 30,-bd * (prog % 360 + 120)); + drawCircle(ctx,700,500,550,bd * 30,-bd * (prog % 360 + 240)); + + ctx.lineWidth = 8; + drawCircle(ctx,700,500,450,bd * 360,0); + + ctx.lineWidth = 16; + drawCircle(ctx,700,500,440,bd * 60,-bd * ((prog * 2) % 360)); + drawCircle(ctx,700,500,440,bd * 60,-bd * ((prog * 2) % 360 + 120)); + drawCircle(ctx,700,500,440,bd * 60,-bd * ((prog * 2) % 360 + 240)); + + ctx.lineWidth = 10; + drawCircle(ctx,700,500,390,bd * 60,bd * ((prog * 7) % 360 + 160)); + ctx.lineWidth = 8; + drawCircle(ctx,700,500,370,bd * 30,-bd * ((prog * 8) % 360 + 290)); + + ctx.lineWidth = 8; + drawCircle(ctx,700,500,350,bd * 60,bd * ((prog * 3) % 360)); + ctx.lineWidth = 38; + drawCircle(ctx,700,500,335,bd * 20,bd * ((prog * 3) % 360 + 59)); + ctx.lineWidth = 8; + drawCircle(ctx,700,500,320,bd * 80,bd * ((prog * 3) % 360 + 60)); + + ctx.lineWidth = 8; + drawCircle(ctx,700,500,350,bd * 50,bd * ((prog * 3) % 360 + 200)); + ctx.lineWidth = 28; + drawCircle(ctx,700,500,340,bd * 40,bd * ((prog * 3) % 360 + 249)); + ctx.lineWidth = 8; + drawCircle(ctx,700,500,330,bd * 60,bd * ((prog * 3) % 360 + 260)); + + ctx.lineWidth = 4; + drawCircle(ctx,700,500,300,bd * 360,0); + ctx.lineWidth = 16; + drawCircle(ctx,700,500,295,bd * 80,-bd * ((prog * 4) % 360 + 90)); + + ctx.lineWidth = 8; + drawCircle(ctx,700,500,260,bd * 90,bd * ((prog * 4) % 360)); + drawCircle(ctx,700,500,230,bd * 120,-bd * ((prog * 5) % 360 + 120)); + drawCircle(ctx,700,500,210,bd * 160,bd * ((prog * 3) % 360 + 270)); + + ctx.strokeStyle = 'rgba(128,128,128,' + (1 - (prog % 24)/24) + ')'; + ctx.lineWidth = 8; + drawCircle(ctx,700,500,80 + (prog % 24) * 4,bd * 360,0); + ctx.lineWidth = 4; + drawCircle(ctx,700,500,70 + (prog % 24) * 4,bd * 360,0); + + ctx.font = 'bold 16px tahoma'; + drawTextAlongArc(ctx,"Hello TOJ [FORCORO]",700,500,460,bd * 60,bd * (prog % 360 + 115) * 2); + drawTextAlongArc(ctx,"Are You Happy?",700,500,460,bd * 50,bd * (prog % 360 + 30) * 2); + + if(prog < 456 || prog > 912){ + ctx.strokeStyle = 'rgba(255,255,255,1)'; + ctx.lineWidth = 6; + drawCircle(ctx,700,500,60,bd * 60,bd * ((prog * 4) % 360)); + drawCircle(ctx,700,500,60,bd * 60,bd * ((prog * 4) % 360 + 180)); + }else{ + u = prog % 48; + if(u == 0){ + pa_off = bd * (prog % 373); + pa_c = prog % 5 + 3; + pa_co = Math.round(Math.random() * co_table.length); + } + ctx.strokeStyle = 'rgba(' + co_table[pa_co] + ',' + (1 - u / 48) + ')'; + drawPoly(ctx,700,500,u * 20,pa_c,pa_off); + u = (prog + 24) % 48; + if(u == 0){ + pb_off = bd * (prog % 173); + pb_c = prog % 5 + 3; + pb_co = Math.round(Math.random() * co_table.length); + } + ctx.strokeStyle = 'rgba(' + co_table[pb_co] + ',' + (1 - u / 48) + ')'; + drawPoly(ctx,700,500,u * 20,pb_c,pb_off); + + ctx.strokeStyle = 'rgba(255,255,255,1)'; + ctx.lineWidth = 6; + drawCircle(ctx,700,500,60,bd * 60,-bd * ((prog * 15) % 360)); + drawCircle(ctx,700,500,60,bd * 60,-bd * ((prog * 15) % 360 + 180)); + } + + v = prog % 96; + if((v >= 24 && v < 26)|| (v >= 28 && v < 30)){ + ctx.shadowBlur = 5; + }else{ + ctx.shadowBlur = 0; + } + + ctx.font = 'bold 64px tahoma'; + u = 0; + ctx.fillStyle = 'rgba(255,255,0,1)'; + ctx.shadowColor = 'rgba(255,255,0,1)'; + ctx.fillText('T',1000 + u,600); + ctx.fillStyle = 'rgba(255,255,255,1)'; + ctx.shadowColor = 'rgba(255,255,255,1)'; + u += ctx.measureText('T').width; + ctx.fillText('aiwan',1000 + u,600); + u += ctx.measureText('aiwan').width; + + if((v >= 32 && v < 34)|| (v >= 36 && v < 38)){ + ctx.shadowBlur = 5; + }else{ + ctx.shadowBlur = 0; + } + + ctx.fillStyle = 'rgba(255,0,255,1)'; + ctx.shadowColor = 'rgba(255,0,255,1)'; + ctx.fillText(' O',1000 + u,600); + ctx.fillStyle = 'rgba(255,255,255,1)'; + ctx.shadowColor = 'rgba(255,255,255,1)'; + u += ctx.measureText(' O').width; + ctx.fillText('nline',1000 + u,600); + u += ctx.measureText('nline').width; + + if((v >= 40 && v < 42)|| (v >= 44 && v < 46)){ + ctx.shadowBlur = 5; + }else{ + ctx.shadowBlur = 0; + } + + ctx.fillStyle = 'rgba(0,255,255,1)'; + ctx.shadowColor = 'rgba(0,255,255,1)'; + ctx.fillText(' J',1000 + u,600); + ctx.fillStyle = 'rgba(255,255,255,1)'; + ctx.shadowColor = 'rgba(255,255,255,1)'; + u += ctx.measureText(' J').width; + ctx.fillText('udge',1000 + u,600); + + ctx.shadowBlur = 0; + + ctx.fillStyle = 'rgba(255,196,8,0.9)'; + drawRect(ctx,0,930,1920,70); + + ctx.font = 'bold 50px 微軟正黑體'; + ctx.fillStyle = 'rgba(255,255,255,1)'; + ctx.fillText('Taiwan Online Judge へようこそ システムテスト',1920 - (prog % 360) / 360 * 3000,980); + ctx.fillText('Taiwan Online Judge へようこそ システムテスト',1920 - ((prog + 180) % 360) / 360 * 3000,980); + + ctx.font = 'bold 36px 微軟正黑體'; + u = ctx.measureText('Parallel Judge 使用可能').width + 64; + ctx.fillText('Parallel Judge 使用可能',1920 - u,64); + + if(prog % 24 < 12){ + ctx.font = 'bold 36px 微軟正黑體'; + u = ctx.measureText('INSERT COIN[S]').width + 64; + ctx.fillText('INSERT COIN[S]',1920 - u,1045); + } + + if(prog <= 45){ + ctx.fillStyle = 'rgba(8,8,8,1)'; + drawRect(ctx,0,0,1920,1080); + }else if(prog < 50){ + ctx.fillStyle = 'rgba(8,8,8,' + (1 - (prog / 50)) + ')'; + drawRect(ctx,0,0,1920,1080); + } + + if(prog > 25){ + if(prog <= 45){ + ctx.fillStyle = 'rgba(255,255,0,1)'; + drawRect(ctx,1000 * ((prog - 25) / 20) * 4 - 3000,500,200,128); + ctx.fillStyle = 'rgba(255,0,255,1)'; + drawRect(ctx,1200 * ((prog - 25) / 20) * 4 - 3600,500,200,128); + ctx.fillStyle = 'rgba(0,255,255,1)'; + drawRect(ctx,1400 * ((prog - 25) / 20) * 4 - 4200,500,200,128); + }else if(prog < 50){ + ctx.fillStyle = 'rgba(255,255,0,' + (1 - (prog / 50)) + ')'; + drawRect(ctx,1000,500,200,128); + ctx.fillStyle = 'rgba(255,0,255,' + (1 - (prog / 50)) + ')'; + drawRect(ctx,1200,500,200,128); + ctx.fillStyle = 'rgba(0,255,255,' + (1 - (prog / 50)) + ')'; + drawRect(ctx,1400,500,200,128); + } + } + + st = et; + prog++; + if(prog == 1080){ + prog = 360; + } + window.requestAnimationFrame(ani); + }; + + var loadani = function(){ + var u; + var v; + + ctx.clearRect(0,0,1920,1080); + + if(tmp_stop == true){ + return; + } + + if(prog < 50){ + u = 0; + }else if(prog < 100){ + u = (prog - 50) / 50; + }else if(prog < 250){ + u = 1; + }else if(prog < 300){ + u = (300 - prog) / 50; + }else{ + u = 0; + } + + ctx.fillStyle = 'rgba(8,8,8,1)'; + drawRect(ctx,0,0,1920,1080); + + v = ctx.measureText('TF∪CK ').width; + ctx.fillStyle = 'rgba(128,0,0,' + u + ')'; + ctx.fillRect(960 - v / 2 - 10,380,v + 20,200); + + ctx.fillStyle = 'rgba(255,255,255,' + u + ')'; + ctx.font = 'bold 192px tahoma'; + ctx.fillText('TF∪CK ',960 - v / 2,550); + + prog++; + if(prog == 400){ + prog = 0; + st = 0; + document.getElementById('tmp_audio').play(); + ani(); + }else{ + setTimeout(loadani,10); + } + } + + e_ani = document.getElementById('tmpani'); + e_canvas = document.getElementById('tmpcanv'); + + if(e_ani.clientWidth * 9 > e_ani.clientHeight * 16){ + e_canvas.width = e_ani.clientHeight / 9 * 16; + e_canvas.height = e_ani.clientHeight; + }else{ + e_canvas.width = e_ani.clientWidth; + e_canvas.height = e_ani.clientWidth / 16 * 9; + } + + var waitaudio = function(){ + if(document.getElementById('tmpload_audio').readyState != 4 || document.getElementById('tmp_audio').readyState != 4){ + setTimeout(waitaudio,100); + }else{ + e_audio = document.getElementById('tmpload_audio'); + e_audio.play(); + loadani(); + } + } + + ctx = e_canvas.getContext('2d'); + ctx.scale(e_canvas.width / 1920,e_canvas.height / 1080); + + tmp_stop = false; + if(tmp_first == true){ + load = true; + waitaudio(); + }else{ + load = false; + ani(); + } + + tmp_first = false; + } +}; __extend(class_home_page,class_common_page); + +var class_none_page = function(){ + var that = this; + var j_page = $($('#index_page > [page="none"]')[0]); + + that.__super(); + + that.urlchange = function(direct){ + if(direct == 'in'){ + that.fadein(j_page); + index.settitle('Taiwan Online Judge'); + }else if(direct == 'out'){ + that.fadeout(j_page); + } + } + common.addpage('none',that); +}; __extend(class_none_page,class_common_page); + + |