zoukankan      html  css  js  c++  java
  • HTML5 之Canvas绘制太阳系

    <!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>

    效果图:

    Canvas太阳系

  • 相关阅读:
    JavaScript事件模拟元素拖动
    瀑布流思路总结
    JavaScript模拟QQ签名(HTML5 contenteditable属性)
    烧录时发生:permission denied:'/dev/ttyUSB0'问题的解决
    学习笔记——make项目中克隆GitHub目录失败的解决
    学习笔记——ESP8266项目的例子编译时发生cannot find -lstdc++问题的解决
    ohmyzsh的安装过程中失败拒绝连接问题的解决
    对ESP8266的例子进行编译时报错check_python_dependencies的问题的解决
    ESP8266交叉编译环境变量设置
    ubuntu下安装ESP8266开发环境步骤中可能出现的问题及解决办法
  • 原文地址:https://www.cnblogs.com/lt-style/p/3413512.html
Copyright © 2011-2022 走看看