zoukankan      html  css  js  c++  java
  • canvas 绘画 星空

     代码如下:

    <!doctype html>
    <html>
        
    <head>
        <meta charset="utf-8">
        <title>星空背景代码实现</title>
        <script src="https://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
        <style type="text/css">
            #canvas{
                position: absolute;
                z-index: -1;
                left: 0;
                top: 0;
            }
            .main{
                position: absolute;
                z-index: 2;
                top: 0;
                left: 0;
                
            }
            h1{
                color: #FFFFFF;
            }
        </style>
    </head>
    
    <body>
        <div id="main">
            <h1>canvas</h1>
        </div>
        <!-- 
            1、简要介绍 canvas 绘制  js代码     
            2、如何用来做背景   z-index 什么情况下才有用
            3、弹性盒子作浮动元素居中 display: flex; align-items: center; justify-content: center;
            4、下载网址  https://www.jq22.com/
         -->
        <canvas id="canvas"></canvas>
    
        <script>
            var canvas = document.getElementById('canvas'),
                ctx = canvas.getContext('2d'),
                w = canvas.width = window.innerWidth,
                h = canvas.height = window.innerHeight,
    
                hue = 217,      // 十六进制颜色
                stars = [],
                count = 0,
                maxStars = 1200;    // 星星的数量
    
            var canvas2 = document.createElement('canvas'),
                ctx2 = canvas2.getContext('2d');
            canvas2.width = 100;
            canvas2.height = 100;
            var half = canvas2.width / 2,
                // 绘制一个矩形,并用放射状/圆形渐变进行填充:(x0,y0,r0,x1,y1,r1)
                gradient2 = ctx2.createRadialGradient(half, half, 0, half, half, half);
            // gradient.addColorStop(stop 0~1,color);
            gradient2.addColorStop(0.025, '#fff');
            gradient2.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)');
            gradient2.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)');
            gradient2.addColorStop(1, 'transparent');
    
            ctx2.fillStyle = gradient2;
            ctx2.beginPath();   // 起始一条路径,或重置当前路径
            ctx2.arc(half, half, half, 0, Math.PI * 2);
            ctx2.fill();    // 填充当前绘制(路径)
    
            // canvas 绘制的大小
            $(window).resize(function () {
                w = canvas.width = window.innerWidth;
                h = canvas.height = window.innerHeight;
                canvas.width(w).height(h);
    
            });
            
            // 最大 和 最小星星的 随机位置
            function random(min, max) {
                if (arguments.length < 2) {
                    max = min;
                    min = 0;
                }
    
                if (min > max) {
                    var hold = max;
                    max = min;
                    min = hold;
                }
    
                return Math.floor(Math.random() * (max - min + 1)) + min;
            }
    
            // 最大和最小的 星星 
            function maxOrbit(x, y) {
                var max = Math.max(x, y),
                    diameter = Math.round(Math.sqrt(max * max + max * max));
                return diameter / 2;
            }
    
            
            var Star = function () {
                this.orbitRadius = random(maxOrbit(w, h));
                this.radius = random(60, this.orbitRadius) / 12;
                this.orbitX = w / 2;
                this.orbitY = h / 2;
                this.timePassed = random(0, maxStars);
                this.speed = random(this.orbitRadius) / 900000;
                this.alpha = random(2, 10) / 10;
    
                count++;
                stars[count] = this;
            }
    
            Star.prototype.draw = function () {
                var x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX,
                    y = Math.cos(this.timePassed) * this.orbitRadius + this.orbitY,
                    twinkle = random(10);
    
                if (twinkle === 1 && this.alpha > 0) {
                    this.alpha -= 0.05;
                } else if (twinkle === 2 && this.alpha < 1) {
                    this.alpha += 0.05;
                }
    
                ctx.globalAlpha = this.alpha;
                ctx.drawImage(canvas2, x - this.radius / 2, y - this.radius / 2, this.radius, this.radius);
                this.timePassed += this.speed;
            }
    
            for (var i = 0; i < maxStars; i++) {
                new Star();
            }
    
            function animation() {
                ctx.globalCompositeOperation = 'source-over';
                ctx.globalAlpha = 0.8;
                ctx.fillStyle = 'hsla(' + hue + ', 64%, 6%, 1)';
                ctx.fillRect(0, 0, w, h)
    
                ctx.globalCompositeOperation = 'lighter';
                for (var i = 1, l = stars.length; i < l; i++) {
                    stars[i].draw();
                };
    
                window.requestAnimationFrame(animation);
            }
    
            animation();
        </script>
    
    </body>
    
    </html>
  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/ZXH-null/p/14188612.html
Copyright © 2011-2022 走看看