特效描述: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.drawImage(oImg,0,planetData[i].location,planetData[i].tw,planetData[i].th,-planetData[i].sw/2,-planetData[i].sh/2,planetData[i].sw,planetData[i].sh);

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].r*Math.cos(planetData[i].num*Math.PI/180),

ry=oCas.height/2+planetData[i].r*Math.sin(planetData[i].num*Math.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].r*Math.cos(planetData[i].num*Math.PI/180),

ry=oCas.height/2+planetData[i].r*Math.sin(planetData[i].num*Math.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;

requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;

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

  1. java 怎么清除画布_HTML5 Canvas 清除画布

    HTML5 Canvas 清除画布 HTML5 Canvas clearRect()的使用方法,2D上下文功能clearRect()用于清除画布的矩形.清除的矩形变为透明. 在线示例 2D上下文功能c ...

  2. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

    这是一款HTML5 canvas橡皮擦擦拭效果.该效果通过canvas来制作遮罩层和擦拭用的橡皮擦,用户可以通过移动鼠标来移除遮罩层,效果非常炫酷. 因为发代码有时会排版混乱,所以先发图演示了.源码已 ...

  3. java如何实现多个小球碰撞后反弹以及绘制动态图。

    本次小实验,通过三个类的编写来实现. 首先创建一个点类,其中包含对点的构造方法和多个需要点的构造方法. /*** 点类,表示平面中的点或始点为原点的向量* @author xxx**/ public ...

  4. java png生成webp图片_PNG转WEBP格式的动态图

    最近接手的项目上需要替换以前的UI资源,其中有部分动态图使用的是freso+webp进行显示,然而设计给的只有一帧帧的PNG格式,本来想随便转个GIF弄上去,结果透明背景的PNG转成GIF很容易出现白 ...

  5. HTML+CSS绘制太阳系九大行星运行轨迹

    HTML+CSS绘制太阳系九大行星运行轨迹 最近正在菜鸟教程学习前端的相关知识,学习过程中发现这个项目比较有趣且知识涵盖比较多,所以就写篇博客记录一下,方便以后查看.这是我第一次写技术博客,如遇有缘人 ...

  6. MATLAB 太阳系九大行星运行(天文物理)天体仿真(一)

    MATLAB 太阳系九大行星运行仿真,代码如下(没有依据实际的速度,大小,和相对位置,请自行搜集资料和调整):(代码有问题请留言,代码来源百度知道并稍加修改) CODE BEGIN: clear;cl ...

  7. 【零基础学Java】—List集合(三十九)

    [零基础学Java]-List集合(三十九) java.util.list接口 extends Collection接口 list接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储1 ...

  8. 【零基础学Java】—成员变量和局部变量(九)

    [零基础学Java]-成员变量和局部变量(九)

  9. 【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式

    [genius_platform软件平台开发]第七十九讲:Linux系统中可执行程序后台运行的几种方式 1. 问题描述 2. & 符号 3. nohup指令 4. ctrl + z.jobs. ...

最新文章

  1. oracle 关闭audit,关于Oracle审计(audit)
  2. 关于ewebeditor行距
  3. 【Laravel-海贼王系列】第七章,Pipeline 类解析
  4. Hadoop-2.4.1学习之edits和fsimage查看器
  5. _Linux进程信号详解
  6. 第三届全国高校“数据科学与大数据技术”教学研讨会
  7. 读《高性能网站建设指南》有感
  8. 文件下载时,IE与FireFox对文件名编码的不同处理! Content-Disposition
  9. Linux Tun/Tap网口(/dev/net/tun)的读写方法
  10. 黑马程序员提供得教程
  11. php时间戳转换成日期格式,PHP时间戳和日期格式相互转换
  12. 如何批量修改文件名称
  13. Chrome的YouTube双语字幕插件
  14. 当“程序猿”遇到“母亲节”,看他们是如何送上特殊的祝福
  15. 重返设计模式--命令模式
  16. Kata Container 2.x 和 3.0 安装,内核编译,镜像制作
  17. yarn打包报错:error during build: Error: Assigning to rvalue (Note that you need plugins to import files
  18. 【信奥题库 NOIP 2020 在线模拟赛 T4】三元组
  19. Vue3 使用 store 给请求头配上 token
  20. 前端工程化 - 剖析npm的包管理机制

热门文章

  1. strstr和strchr的区别
  2. 怎么选择国际短信平台?
  3. 加多芬科技讲解目前趋势“不带钱包出门”已成趋势 无现金支付你准备好了吗?
  4. SVG/CSS路径动画
  5. 应力奇异,你是一个神奇的应力!
  6. ANSYS中按照X坐标提取节点应力值
  7. 游戏直播的下一站在哪?战旗TV开启线上线下联动
  8. neogeo模拟器 linux,neogeo模拟器
  9. Nginx反向代理服务器高速缓存数据结构的部分实现
  10. 搜索引擎蜘蛛 ajax,SEO中的搜索引擎蜘蛛技术探析