网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 html5使用canvas实现跟随光标跳动的火焰效果
范文
    本效果的完整代码如下,把代码保存到HTML文件中打开也能查看效果,火焰会跟随光标:
    代码如下:
    <!DOCTYPE HTML>
    <head>
    <meta charset=utf-8" />
    <title>HTML5 Canvas火焰效果</title>
    <style type="text/css">
    body{margin: 0; padding: 0;}
    #canvas-keleyi-com {display: block;}
    </style>
    </head>
    <body>
    <canvas id="canvas-keleyi-com"></canvas>
    <script type="text/javascript">
    window.onload = function(){
    var keleyi_canvas = document.getElementById("canvas-kel"+"eyi-com");
    var ctx = keleyi_canvas.getContext("2d");
    var W = window.innerWidth, H = window.innerHeight;
    keleyi_canvas.width = W;
    keleyi_canvas.height = H;</p> <p>var particles = [];
    var mouse = {};</p> <p>//Lets create some particles now
    var particle_count = 100;
    for(var i = 0; i < particle_count; i++)
    {
    particles.push(new particle());
    }
    keleyi_canvas.addEventListener('mousemove', track_mouse, false);</p> <p>function track_mouse(e)
    {
    mouse.x = e.pageX;
    mouse.y = e.pageY;
    }</p> <p>function particle()
    {
    this.speed = {x: -2.5+Math.random()*5, y: -15+Math.random()*10};
    //location = mouse coordinates
    //Now the flame follows the mouse coordinates
    if(mouse.x && mouse.y)
    {
    this.location = {x: mouse.x, y: mouse.y};
    }
    else
    {
    this.location = {x: W/2, y: H/2};
    }
    //radius range = 10-30
    this.radius = 10+Math.random()*20;
    //life range = 20-30
    this.life = 20+Math.random()*10;
    this.remaining_life = this.life;
    //colors
    this.r = Math.round(Math.random()*255);
    this.g = Math.round(Math.random()*255);
    this.b = Math.round(Math.random()*255);
    }</p> <p>function draw()
    {
    ctx.globalCompositeOperation = "source-over";
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, W, H);
    ctx.globalCompositeOperation = "lighter";</p> <p>for(var i = 0; i < particles.length; i++)
    {
    var p = particles[i];
    ctx.beginPath();
    p.opacity = Math.round(p.remaining_life/p.life*100)/100
    var gradient = ctx.createRadialGradient(p.location.x, p.location.y, 0, p.location.x, p.location.y, p.radius);
    gradient.addColorStop(0, "rgba("+p.r+", "+p.g+", "+p.b+", "+p.opacity+")");
    gradient.addColorStop(0.5, "rgba("+p.r+", "+p.g+", "+p.b+", "+p.opacity+")");
    gradient.addColorStop(1, "rgba("+p.r+", "+p.g+", "+p.b+", 0)");
    ctx.fillStyle = gradient;
    ctx.arc(p.location.x, p.location.y, p.radius, Math.PI*2, false);
    ctx.fill();</p> <p>
    p.remaining_life--;
    p.radius--;
    p.location.x += p.speed.x;
    p.location.y += p.speed.y;</p> <p>if(p.remaining_life < 0 || p.radius < 0)
    {
    particles[i] = new particle();
    }
    }
    }</p> <p>setInterval(draw, 86);
    }
    </script>
    </body>
    </html>
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/25 12:46:34