HTML5 之Canvas绘制太阳系

时间:2021-01-03 15:41:00
<!DOCTYPE html>
<html>
<head>
<title>HTML5_Canvas_SolarSystem</title>
<!--简单 样式模版-->
<style type="text/css">
*
{
margin: 0;
padding: 0;
font-family: YaHei Consolas Hybrid,宋体;
font-size: 14px;
list-style: none;
}
.wrapper
{
margin: 50px auto;
width: 1000px;
padding: 10px;
border: solid 1px gray;
background-color: #eee;
overflow:auto;
}/*H1浅蓝阴刻字*/
body
{
background-color: gray;
}
h1
{
text-align: center;
display: block;
background-color: #C4DEF7;
color: #344251;
font: normal 30px "微软雅黑";
text-shadow: 1px 1px 0px #DEF3FF;
padding: 5px 0px;
margin:10px;
box-shadow: 0px 2px 6px #000;
border-radius:10px;
} #canvas { background-color:Black;}
</style>
</head>
<body>
<h1>
HTML5 之 Canvas Demo SolarSystem
</h1>
<div class="wrapper">
<canvas width="1000" height="1000" id="canvas"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d"); //初始化画面,并保存当前环境
var initMap= function(){
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.save();
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
} //画轨道
var drawTrack = function () {
for (var i = 0; i <= 8; i++) {
ctx.beginPath();
ctx.arc(0, 0, 60 * i, 0, 360, false);
ctx.closePath();
ctx.strokeStyle = "#fff";
ctx.stroke();
}
} //画星球的函数(圆心坐标,开始渐变色,结束渐变色,公转周期,开始天数)
var drawPlanets = function (x, y, radius, sColor, eColor, cycle) {
this.x = x;
this.y = y;
this.radius = radius;
this.sColor = sColor;
this.eColor = eColor;
this.cycle = cycle;
this.days = 0; this.Draw = function () {
var angle = this.days * (360 / cycle);
ctx.save();
ctx.rotate(angle * Math.PI / 180);
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, 360, false);
ctx.closePath();
var planetStyle = ctx.createRadialGradient(this.x - 2, this.y, 0, this.x, this.y, this.radius);
planetStyle.addColorStop(0, this.sColor);
planetStyle.addColorStop(1, this.eColor);
ctx.fillStyle = planetStyle;
ctx.fill();
ctx.restore();
this.days++;
}
} //画太阳的类,继承drawPlanets
function Sun() {
drawPlanets.call(this, 0, 0, 20, "#F00", "#f90", 0);
}
//创建一个水星的对象构造方法
function Mercury() {
drawPlanets.call(this, 60, 0, 12, "#A69697", "#5C3E40", 87.70);
}
//创建一个金星的对象构造方法
function Venus() {
drawPlanets.call(this, 120, 0, 14, "#C4BBAC", "#1F1315", 224.701);
}
//创建一个地球的对象构造方法
function Earth() {
drawPlanets.call(this, 180, 0, 15, "#0FAFFC", "#005281", 365);
}
//创建一个火星的对象构造方法
function Mars() {
drawPlanets.call(this, 240, 0, 15, "#CEC9B6", "#76422D", 686.98);
}
//创建一个木星的对象构造方法
function Jupiter() {
drawPlanets.call(this,300, 0, 15, "#C0A48E", "#322222", 4332.589);
}
//创建一个土星的对象构造方法
function Saturn() {
drawPlanets.call(this,360, 0, 15, "#F7F9E3", "#5C4533", 10759.5);
}
//创建一个天王星的对象构造方法
function Uranus() {
drawPlanets.call(this,420, 0, 15, "#A7E1E5", "#19243A", 30799.095);
}
//创建一个海王星的对象构造方法
function Neptune() {
drawPlanets.call(this,480, 0, 15, "#0661B2", "#1E3B73", 60152);
} //实例化出星球的对象
var sun = new Sun();
var earth = new Earth();
var mercury = new Mercury();
var venus = new Venus();
var mars = new Mars();
var jupiter = new Jupiter();
var saturn = new Saturn();
var uranus = new Uranus();
var neptune = new Neptune(); var move = function () {
//初始化画布,并保存环境
initMap();
//绘制轨道
drawTrack();
//调用绘制星球的函数
sun.Draw();
earth.Draw();
venus.Draw();
mars.Draw();
jupiter.Draw();
saturn.Draw();
uranus.Draw();
mercury.Draw();
neptune.Draw();
//返回到开始保存的环境
ctx.restore(); }
move();
//启动定时器,开始绘制
window.setInterval(move, 80); </script>
</div>
</body>
</html>

效果图:

HTML5 之Canvas绘制太阳系