Advertisement

java 九大行星运行_html5 canvas太阳系九大行星运行动态图代码

阅读量:

特效描述:使用HTML5 Canvas绘制太阳系模型并展示九颗行星的动态运行轨迹。该动画系统通过鼠标的悬停操作实现各天体名称标注功能

代码结构

1. HTML代码

你浏览器不支持

window.οnlοad=function(){

var oImg=new Image();

oImg.src="img.png";

oImg.offOn=false;

oImg.οnlοad=function(){

oImg.offOn=true;

};

/行星数据存储/

var planetData=[{

type:"mercury",

speed:100,

location:220,

r:100,

tw:222,

th:220,

sw:30,

sh:30,

num:100,

count:460,

fontShow:false

},{

type:"Venus",

speed:100,

location:440,

r:150,

tw:228,

th:228,

sw:36,

sh:36,

num:200,

count:560,

fontShow:false

},{

type:"earth",

r:220,

speed:100,

location:668,

tw:252,

th:252,

sw:40,

sh:40,

num:400,

count:760,

fontShow:false

},{

type:"Mars",

r:300,

speed:100,

location:920,

tw:275,

th:276,

sw:50,

sh:50,

num:500,

count:860,

fontShow:false

},{

type:"Jupiter",

r:380,

speed:100,

location:1654,

tw:480,

th:480,

sw:66,

sh:66,

num:600,

count:960,

fontShow:false

},{

type:"Saturn",

r:490,

speed:100,

location:2134,

tw:533,

th:376,

sw:70,

sh:55,

num:700,

count:1060,

fontShow:false

},{

type:"Uranus",

r:570,

speed:100,

location:1196,

tw:342,

th:458,

sw:46,

sh:55,

num:800,

count:1160,

fontShow:false

},{

type:"Neptune",

r:630,

speed:100,

location:0,

tw:220,

th:220,

sw:40,

sh:40,

num:900,

count:1260,

fontShow:false

}]

/太阳字体显示变量/

var sunShow=true;

/画布开始/

var oCas=document.getElementById("canvas");

var ctx=oCas.getContext("2d");

canvas.width=document.documentElement.clientWidth;

canvas.height=document.documentElement.clientWidth;

function draw(){

ctx.clearRect(0,0,canvas.width,canvas.height);

if(oImg.offOn){

/太阳/

ctx.drawImage(oImg,0,2510,750,750,(oCas.width-100)/2,(oCas.height-100)/2,100,100);

/太阳字体显示/

if(sunShow){

ctx.font="20px Arial";

ctx.fillStyle="#fff";

ctx.textAlign="center";

ctx.fillText("sun",oCas.width/2,oCas.height/2-50);

}

/轨迹颜色/

ctx.strokeStyle="rgba(0,153,255,.4)";

/循环行星数据,绘制出行星/

for(var i=0;i

planetData[i].num+=planetData[i].speed/planetData[i].r;

if(planetData[i].num>=planetData[i].count){

planetData[i].num=planetData[i].count-360;

}

ctx.beginPath();

ctx.arc(oCas.width/2,oCas.height/2,planetData[i].r,0,2*Math.PI);

ctx.stroke();

ctx.save();

ctx.translate(oCas.width/2,oCas.height/2);

ctx.rotate(planetData[i].num*Math.PI/180);

ctx.translate(planetData[i].r,0);

ctx绘制图像到指定位置并设置缩放比例及居中显示

ctx.beginPath();

ctx.fillStyle="rgba(0,0,0,.5)";

ctx.fillRect(0,-planetData[i].sh/2,planetData[i].sw/2,planetData[i].sh);

ctx.restore();

/字体显示/

if(planetData[i].fontShow){

var rx=oCas.width/2+planetData[i].rMath.cos(planetData[i].numMath.PI/180),

ry=oCas.height/2+planetData[i].rMath.sin(planetData[i].numMath.PI/180),

str=planetData[i].type,

sh=planetData[i].sh;

ctx.font="20px Arial";

ctx.fillStyle="#fff";

ctx.textAlign="center";

ctx.fillText(str,rx,ry-sh/2-10);

}

}

}

requestAnimationFrame(draw);

}

draw();

oCas.οnmοusemοve=function(ev){

ev=ev || window.event;

var x=ev.layerX || ev.offsetX;

var y=ev.layerY || ev.offsetY;

/太阳字体显示/

ctx.beginPath();

ctx.arc(oCas.width/2,oCas.height/2,50,0,2*Math.PI);

if(ctx.isPointInPath(x,y)){

for(var j=0;j

planetData[j].fontShow=false;

}

sunShow=true;

};

for(var i=0;i

/八大行星字体显示判断/

ctx.beginPath();

var rx=oCas.width/2+planetData[i].rMath.cos(planetData[i].numMath.PI/180),

ry=oCas.height/2+planetData[i].rMath.sin(planetData[i].numMath.PI/180),

str=planetData[i].type;

ctx.arc(rx,ry,planetData[i].sw/2,0,2*Math.PI);

if(ctx.isPointInPath(x,y)){

sunShow=false;

for(var j=0;j

planetData[j].fontShow=false;

}

switch(str){

case "mercury":

planetData[0].fontShow=true;

break;

case "Venus":

planetData[1].fontShow=true;

break;

case "earth":

planetData[2].fontShow=true;

break;

case "Mars":

planetData[3].fontShow=true;

break;

case "Jupiter":

planetData[4].fontShow=true;

break;

case "Saturn":

planetData[5].fontShow=true;

break;

case "Uranus":

planetData[6].fontShow=true;

break;

case "Neptune":

planetData[7].fontShow=true;

break;

}

}

}

}

}

var w = window;

current frame’s animation time is determined by window.webkitRequestAnimationFrame, window.RequestAnimationFrame, window.msRequestFramebuffer, and window.mozRequestAnimationFrame.

全部评论 (0)

还没有任何评论哟~