110行JavaScript代码实现的雪花纷飞动画效果

简介: 110行JavaScript代码实现的雪花纷飞动画效果

Snow

</div><div>/* comment out - could also work</div><div>* {margin: 0; padding: 0;}</div><div>*/</div><div>body {</div><div>    /*You can use any kind of background here.*/</div><div>    background: #6b92b9;</div><div>}</div><div>canvas {</div><div>    /* could also work */</div><div>    /*display: block;*/</div><div>}</div><div>

</div><div>window.onload = function(){</div><div>    //canvas init</div><div>    var canvas = document.getElementById("canvas");</div><div>    var ctx = canvas.getContext("2d");</div><div>   </div><div>    //canvas dimensions</div><div>    var W = window.innerWidth;</div><div>    var H = window.innerHeight;</div><div>    canvas.width = W;</div><div>    canvas.height = H;</div><div>   </div><div>    //snowflake particles number  </div><div>    var mp = 3000; //max particles</div><div>    var particles = [];</div><div>    for(var i = 0; i < mp; i++)</div><div>    {</div><div>        particles.push({</div><div>            x: Math.random()*W, //x-coordinate</div><div>            y: Math.random()*H, //y-coordinate</div><div>            r: Math.random()*3+1, //radius</div><div>            d: Math.random()*mp //density</div><div>        })</div><div>    }</div><div>   </div><div>    //Lets draw the flakes</div><div>    function draw()</div><div>    {</div><div>        ctx.clearRect(0, 0, W, H);</div><div>       </div><div>       ctx.fillStyle = "rgba(255, 255, 255, 0.8)";</div><div>       /* ctx.fillStyle = "#FF0000";*/</div><div>        ctx.beginPath();</div><div>        for(var i = 0; i < mp; i++)</div><div>        {</div><div>            var p = particles[i];</div><div>            ctx.moveTo(p.x, p.y);</div><div>            ctx.arc(p.x, p.y, p.r, 0, Math.PI*2, true);</div><div>        }</div><div>        ctx.fill();</div><div>        update();</div><div>    }</div><div>   </div><div>    //Function to move the snowflakes</div><div>    //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</div><div>    var angle = 0;</div><div>    function update()</div><div>    {</div><div>        angle += 0.01;</div><div>        for(var i = 0; i < mp; i++)</div><div>        {</div><div>            var p = particles[i];</div><div>            //Updating X and Y coordinates</div><div>            //We will add 1 to the cos function to prevent negative values which will lead flakes to move upwards</div><div>            //Every particle has its own density which can be used to make the downward movement different for each flake</div><div>            //Lets make it more random by adding in the radius</div><div>            p.y += Math.cos(angle+p.d) + 1 + p.r/2;</div><div>            p.x += Math.sin(angle) * 2;</div><div>           </div><div>            //Sending flakes back from the top when it exits</div><div>            //Lets make it a bit more organic and let flakes enter from the left and right also.</div><div>            if(p.x > W || p.x < 0 || p.y > H)</div><div>            {</div><div>                if(i%3 > 0) //66.67% of the flakes</div><div>                {</div><div>                    particles[i] = {x: Math.random()*W, y: -10, r: p.r, d: p.d};</div><div>                }</div><div>                else</div><div>                {</div><div>                    //If the flake is exitting from the right</div><div>                    if(Math.sin(angle) > 0)</div><div>                    {</div><div>                        //Enter fromth</div><div>                        particles[i] = {x: -5, y: Math.random()*H, r: p.r, d: p.d};</div><div>                    }</div><div>                    else</div><div>                    {</div><div>                        //Enter from the right</div><div>                        particles[i] = {x: W+5, y: Math.random()*H, r: p.r, d: p.d};</div><div>                    }</div><div>                }</div><div>            }</div><div>        }</div><div>    }</div><div>   </div><div>    //animation loop</div><div>    setInterval(draw, 50);</div><div>}</div><div>

image.pngimage.pngimage.pngimage.png

目录
相关文章
|
11天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
1月前
|
存储 JavaScript 前端开发
非常实用的JavaScript一行代码(整理总结)
非常实用的JavaScript一行代码(整理总结)
27 0
|
1月前
|
JavaScript 前端开发 测试技术
如何编写JavaScript模块化代码
如何编写JavaScript模块化代码
12 0
|
1月前
|
机器学习/深度学习 前端开发 JavaScript
实用的javascript代码分享
32个史上最有用的js代码
28 1
|
26天前
|
JSON 前端开发 JavaScript
16个重要的JavaScript代码
16个重要的JavaScript代码
30 1
|
28天前
|
JavaScript
当当网新用户注册界面——JS代码
当当网新用户注册界面——JS代码
7 0
|
28天前
|
JavaScript
当当网首页——JS代码
当当网首页——JS代码
10 1
|
29天前
|
JavaScript Java
什么?java中居然可以执行js代码了?真是不知者不怪
什么?java中居然可以执行js代码了?真是不知者不怪
13 1
|
29天前
|
JavaScript 前端开发 Python
生成X-Bogus的js代码,通过python调用生成
该文本是一个关于如何解析和执行JavaScript代码的步骤说明。主要内容包括: 1. 找到JavaScript文件的位置。 2. 下载代码并进行格式化。 3. 运行代码时会出现缺少变量错误,需要添加模拟环境的代码。 4. 指出主要的入口函数是`_0x5a8f25`,将其赋值给`window`。 5. 提供了整个JavaScript代码的长串内容。 6. 提供了一个Python脚本,用于调用这个JavaScript函数并处理返回的数据。 总结:这段文本描述了如何处理和运行一个JavaScript文件,以及使用Python来与这个脚本交互的示例。
|
1月前
|
存储 JavaScript 编译器
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!