zoukankan      html  css  js  c++  java
  • html5 canvas 一个漫天飞雪的效果

    很棒的下雪效果

    代码奉上

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>漫天飞雪</title>
    <style type="text/css">
    * {margin: 0; padding: 0;}
    
    body {
        /*You can use any kind of background here.*/
        background: #6b92b9;
    }
    canvas {
        display: block;
    }
    </style>
    </head>
    
    <body>
    
    <div style=" background:#6b92b9; 100%; height:2000px;" ></div>
    <canvas id="canvas" style="position:fixed; top:0px;left:0px;z-index:80;pointer-events:none;"></canvas>
    
    <script>
    window.onload = function(){
        //canvas init
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
        
        //canvas dimensions
        var W = window.innerWidth;
        var H = window.innerHeight;
        canvas.width = W;
        canvas.height = H;
        
        //snowflake particles
        var mp = 3000; //max particles
        var particles = [];
        for(var i = 0; i < mp; i++)
        {
            particles.push({
                x: Math.random()*W, //x-coordinate
                y: Math.random()*H, //y-coordinate
                r: Math.random()*3+1, //radius
                d: Math.random()*mp //density
            })
        }
        
        //Lets draw the flakes
        function draw()
        {
            ctx.clearRect(0, 0, W, H);
            
           ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
           /* ctx.fillStyle = "#FF0000";*/
            ctx.beginPath();
            for(var i = 0; i < mp; i++)
            {
                var p = particles[i];
                ctx.moveTo(p.x, p.y);
                ctx.arc(p.x, p.y, p.r, 0, Math.PI*2, true);
            }
            ctx.fill();
            update();
        }
        
        //Function to move the snowflakes
        //angle will be an ongoing incremental flag. Sin and Cos functions will be applied to it to create vertical and horizontal movements of the flakes
        var angle = 0;
        function update()
        {
            angle += 0.01;
            for(var i = 0; i < mp; i++)
            {
                var p = particles[i];
                //Updating X and Y coordinates
                //We will add 1 to the cos function to prevent negative values which will lead flakes to move upwards
                //Every particle has its own density which can be used to make the downward movement different for each flake
                //Lets make it more random by adding in the radius
                p.y += Math.cos(angle+p.d) + 1 + p.r/2;
                p.x += Math.sin(angle) * 2;
                
                //Sending flakes back from the top when it exits
                //Lets make it a bit more organic and let flakes enter from the left and right also.
                if(p.x > W || p.x < 0 || p.y > H)
                {
                    if(i%3 > 0) //66.67% of the flakes
                    {
                        particles[i] = {x: Math.random()*W, y: -10, r: p.r, d: p.d};
                    }
                    else
                    {
                        //If the flake is exitting from the right
                        if(Math.sin(angle) > 0)
                        {
                            //Enter fromth
                            particles[i] = {x: -5, y: Math.random()*H, r: p.r, d: p.d};
                        }
                        else
                        {
                            //Enter from the right
                            particles[i] = {x: W+5, y: Math.random()*H, r: p.r, d: p.d};
                        }
                    }
                }
            }
        }
        
        //animation loop
        setInterval(draw, 15);
    }
    </script>
    </body>
    </html>
    View Code

      r: Math.random()*3+1, //radius

    这行代码改变雪花半径大小

     setInterval(draw, 15);

    这个改变雪花下落速度

       var mp = 3000; //max particles

    这个值改变雪花密度

    耐得住寂寞,守得住繁华
  • 相关阅读:
    计算机进制转换
    十进制二进制转换
    windows XP 下怎样查看系统运行时间总计?
    “编译器错误信息: CS0016: 未能写入输出文件”解决方法
    用ntsd关进程
    Hosts文件的位置
    开机显示client mac addr...... 错误的解决办法 .
    无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口 .
    【转】XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证 .
    关于Access的郁闷二三事。。。
  • 原文地址:https://www.cnblogs.com/djdliu/p/3957436.html
Copyright © 2011-2022 走看看