[转]canvas 烟花效果

看到一个类似于烟花爆炸类的canvas,谈不上多复杂。

源码如下:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8"/>
    <title></title>
    <style type="text/css">
        *{margin:0;padding:0;list-style: none;border:0;}
        body{background: #000;}
        #canvas{margin:0 auto;border:1px solid #ccc;display: block;}
        a{
            width:100px;height:35px;
            line-height: 35px;background: #abcdef;
            color: #fff;text-align: center;
            display: inline-block;text-decoration: none;
            border-radius: 10px;
         }
         .btn{width: 215px;margin:20px auto;}
    </style>
</head>
<body>
<canvas id="canvas"></canvas>
<div class="btn">
    <a href="#" id="beginMove">开始运动</a>
    <a href="#" id="stopMove">停止运动</a>
</div>
<script type="text/javascript">
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    var width=600;
    var height=600;
    canvas.width=width;
    canvas.height=height;
    var circularArr=[];
    var beginMove=document.getElementById("beginMove");
    var stopMove=document.getElementById("stopMove");
    var colorArr=["#ff0000","#ff00d2","#7200ff","#1200ff","#00eaff","#00ff18","#c0ff00","#ffb400","#ff4e00","#0d6e00"];
    function rnd(min, max) {
        return ((Math.random() * (max - min)) + min);
    }
    function circularInit(){
        ctx.clearRect(0,0,canvas.width,canvas.height);
        ctx.font="5px Courier New";
        ctx.fillStyle="#ccc";
        ctx.fillText("如有问题关注微信公众号:smallBj520与我联系",canvas.width-270,canvas.height-10);
        for(var i=0;i<100;i++){
            var circular={
                x:canvas.width/2,
                y:canvas.height/2,
                r:Math.random()*6+2,
                vx: rnd((-1) * 10, 10),
                vy: rnd((-1) * 10, 10),
                //color:colorArr[Math.floor(Math.random()*colors.length)]
            };
            circularArr.push(circular);
            circularArr[i].x+=circularArr[i].vx,
            circularArr[i].y+=circularArr[i].vy;
            if(circularArr[i].x<=0 || circularArr[i].x>=canvas.width){
                circularArr[i].x=canvas.width/2;
                circularArr[i].y=canvas.height/2;
            }
            if(circularArr[i].y<=0 || circularArr[i].y>=canvas.height){
                circularArr[i].x=canvas.width/2;
                circularArr[i].y=canvas.height/2;
            }
            ctx.fillStyle=colorArr[Math.floor(Math.random()*colorArr.length)];
            ctx.beginPath();
            ctx.arc(circularArr[i].x,circularArr[i].y,circularArr[i].r,0,Math.PI*2,false);
            ctx.closePath();
            ctx.fill();
        }

    }

    var timer=setInterval(function(){
         circularInit();
    },80)
    beginMove.onclick=function(){
        console.log(timer);
        if(timer<1){
            timer=setInterval(function(){
                 circularInit();
            },80)
        }
    }
    stopMove.onclick=function(){
        clearInterval(timer);
        timer="";
    }
</script>
</body>
</html>

其中需要注意一下几点:

1、四面八方坐标的生成:利用rnd()函数得到一个-10~10之间的随机数值,得到坐标值;

2、通过for循环,一次性画100个随机的圆点;

3、通过定时器,循环画canvas;

时间: 2024-12-31 10:23:55

[转]canvas 烟花效果的相关文章

烟花效果(Canvas和Proton)

最近看了很多的烟花效果,我自己的感觉就是代码不是很难,只是需要对它的原理好好理解一下.我们都知道一个烟花从发射到炸裂经过的几个阶段,以及这些过程中涉及到了那些东西.那些量会对最后的炸开效果有影响,我们首相应该把这些量考虑好,之后才能上手去写这个程序,我不知道第一个人是怎么写出的但是我看出基本上所有的烟花效果都是那几个量,没什么区别只是有一些具体的值的大小可能不一样.下面我就分享一下我从网上找的一段代码: 这个烟花效果是自动随机产生烟花,不是我们控制的,相对比较简单. 1 <!DOCTYPE ht

canvas烟花-娱乐

网上看到一个释放烟花的canvas案例,很好看哦. 新建文本,把下面代码复制进去,后缀名改为html,用浏览器打开即可. 看懂注释后,可以自己修改烟花的各个效果.我试过让烟花炸成了心型.:-) <!DOCTYPE html> <html dir="ltr" lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewpo

canvas烟花锦集

canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果实现. 实现一 效果地址 html <canvas id="canvas"></canvas> css body { background: #000; margin: 0; } canvas { cursor: crosshair; display: block; } js // when animating on canvas, it is best to use requestAnimati

HTML5 Canvas动画效果实现原理

在线演示 使用HTML5画布可以帮助我们高速实现简单的动画效果.基本原理例如以下: 每隔一定时间绘制图形而且清除图形,用来模拟出一个动画过程,能够使用context.clearRect(0, 0, x, y)方法来刷新须要绘制的图形 首先是绘制图形的方法,例如以下: function myAnimation() { ctx.clearRect(0, 0, canvas_size_x, canvas_size_y); if (x_icon < 0 || x_icon > canvas_size_

6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

?? 1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParticleSystem的全部属性 CCParticleExplosion 爆炸粒子效果 CCParticleFireworks 烟花粒子效果 CCParticleFire 火焰粒子效果 CCParticleMetepr 流行粒子效果 CCParticleSpi

java编写烟花效果

这是运用java实现的烟花效果 运行环境:eclipse 代码如下: package com.java622p.wenzhi; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.net.URL; import java.util.Random; /** * 烟花 * @author wenzhi * */ @SuppressWarnings("serial")

6 cocos2dx粒子效果,类图关系,系统原生粒子和自定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

 1 粒子 示例 2 类图关系 3 系统原生粒子 CCParticleSystem 所有粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性 CCParticleExplosion 爆炸粒子效果 CCParticleFireworks 烟花粒子效果 CCParticleFire 火焰粒子效果 CCParticleMetepr 流行粒子效果 CCParticleSpira

canvas仪表盘效果

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas仪表盘动画效果</title> <style type="text/css"> html, body { width: 100%; height: 100%; margin: 0; } canvas { display: none; border: 1p

2015.4.25-2015.5.1 字符串去重,比例圆设计,中奖机和canvas橡皮擦效果等

1.字符串去重,html模板取值 2.javascript正则表达式之$1...$9 3.jquery插件 4.返回上一页并刷新 解决方法: <a href ="javascript:location.href=document.referrer;"> 5.用webstorm写的手机网站 怎样能用手机预览呢? 解决方法:布署到wamp,xamp,iis上,然后用浏览器生成二维码,扫一扫就可以打开.假如是javaweb项目,挂上tomcat手机直接访问你机子的ip. 6.比例