随机位置创建烟火,烟火作为烟花的容器,每个烟火会包含多个烟花。
代码里都有注释。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> <title>烟花</title> <style type="text/css"> body { height: 1000px; } #lotteryContainer { position: relative; width: 300px; height: 100px; } #drawPercent { color: #F60; } </style> </head> <body> <!-- andrew.stz 转载请注明出处,尊重他人劳动成果,是每个地球人应有的品质 --> <canvas style='background-color:#000;position:absolute;left:0px;top:0px;'></canvas> <script> var c = document.getElementsByTagName('canvas')[0]; //随着窗口调整画布大小 (onresize = function() { c.width = window.innerWidth; c.height = window.innerHeight; })(); new FireWork({ canvas:c, singleColor:false }); function FireWork(option){ /** * 一个烟花包括多个烟火 */ var canvas = option.canvas; if(!canvas||!canvas.nodeType||canvas.nodeType!=1){ alert('请传入canvas元素'); return; } //canvas,singleColor if(!canvas.getContext){ alert('你的浏览器out了!请更新到支持html5的现代浏览器'); return; } this.FPS = option.FPS||40; //期望的帧率,实际不一定能达到 this.singleColor = option.singleColor; this.intervalBase = option.intervalBase||150; //烟花产生间隔调长点以增加性能 this.fireBaseNum = option.fireBaseNum||5; //烟火基本数目(最少多少个) this.fireSeedNum = option.fireSeedNum||8; //烟火种子数目,会在0到这个数之间取随机值 this.fireMaxWidth = option.fireMaxWidth||4; //烟火轨迹的最大宽度,值越大头越大 this.traceLength = option.traceLength||8; //烟火轨迹长度 var self = this; var up = 0; var cvs = canvas.getContext('2d'); var W, H; W = c.width||window.innerWidth; H = c.height||window.innerHeight; //总烟火数组 var fireworks = []; setInterval(function() { cvs.clearRect(0, 0, W, H); //依次绘制烟火 for(var n = 0,len=fireworks.length; n < len; n++) { var firework = fireworks[n]; for(var i = 0,qLen=firework.length; i < qLen; i++) { var pt = firework[i]; //计算路径 pt.move(); //绘制 drawPt(pt.track, pt.life / 30, pt.r, pt.g, pt.b); //超过生存周期就消失 if(pt.life <= 0){ qLen--; firework.splice(i, 1); } } //当一个烟火包含的烟花个数为零,则消灭这个烟火 if(!fireworks[n].length){ len--; fireworks.splice(n, 1); } } //每隔一段时间添加一个新烟火 if(new Date - up < rnd(2000)+self.intervalBase) return; up = new Date; createBoom(rnd(W / 2) + W / 4, rnd(50) + 20); }, 1000/this.FPS); //生成一个烟花 function createPT(x, y, r, g, b) { return { x : x, y : y, r : r, g : g, b : b, //轨迹序列 track : [], dx : rnd(20) - 10, dy : rnd(10) - 7, life : 30 + rnd(30), //移动函数,修改加速度和坐标 move : function() { this.dx *= .98; this.dy *= .98; this.dy += .42; //模拟重力加速度的偏移 dy=y+y*0.98 dx=x*0.98 this.x += this.dx; this.y += this.dy; this.track.push([this.x, this.y]); //保持轨迹长度 if(this.track.length > self.traceLength) this.track.shift(); this.life--; } }; } //在x,y位置创建一个烟火 function createBoom(x, y) { var firework = [], r = rnd(255) | 0, g = rnd(255) | 0, b = rnd(255) | 0; //烟火中的烟花 if(self.singleColor){ for(var i = 0,len=rnd(self.fireSeedNum) + self.fireBaseNum; i < len; i++){ firework.push(createPT(x, y, r, g, b)); } }else{ for(var i = 0,len=rnd(self.fireSeedNum) + self.fireBaseNum; i < len; i++){ firework.push(createPT(x, y, rnd(255) | 0, rnd(255) | 0, rnd(255) | 0)); } } fireworks.push(firework); } function rnd(n) { return (n || 1) * Math.random(); } function drawPt(ar, life, r, g, b) { cvs.save(); //绘制轨迹。思路是每次都绘制一条透明的轨迹,叠加起来形成一条渐变的样子 for(var i = 0,len=ar.length; i < len; i++) { cvs.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + Math.abs(.2 * life) + ')'; cvs.lineWidth = Math.min(i + 1, self.fireMaxWidth); // * 2 cvs.beginPath(); cvs.moveTo(ar[i][0], ar[i][1]); for(var j = i + 1; j < len; j++){ cvs.lineTo(ar[j][0], ar[j][1]); } cvs.stroke(); } cvs.restore(); } } </script> </body> </html>
相关推荐
基于C++语言实现的非常漂亮的祝福烟花效果完整源码 基于C++语言实现的非常漂亮的祝福烟花效果完整源码 基于C++语言实现的非常漂亮的祝福烟花效果完整源码 基于C++语言实现的非常漂亮的祝福烟花效果完整源码 基于C++...
js烟花效果 前端
Flash烟花效果实现动画
Fireworks烟花效果源码.zip
这是一个用Java编写的小动画,显示烟花效果,具有非常逼真的画面显示
Android 烟花效果源码.zip
Android Fireworks烟花效果源码.rar
android项目实战-烟花效果 希望对于学习android的有所帮助
很炫很真实的HTML5烟花效果
Flash烟花效果 源码文件,超漂亮的放烟花效果,源码素材网站长所写的,用到了剪辑复制功能,还有一些简单的AS脚本,烟花是一个剪辑,拉到舞台上即可,设置一下透明度和颜色以及大小,就行了,烟花爆炸特效Flash...
循环喷射的彩色烟花效果ppt模板。
绚丽的烟花效果 & 许愿树 就此开放源码 本想多加些好看的效果的 因时过境迁就没打算加了 程序 编译环境 VC++ 6.0 Windows Xp Sp2上测试通过(纯SDK程序 没有使用MFC、DirectX or OpenGL) 烟花效果要特别感谢 原Java...
安卓源码包android 动画效果Android 烟花效果源码等21个合集: activity切换特效.rar Android Layout UI 首页加载过渡动画,星期变化动画.rar android 仿真翻页效果.rar Android 烟花效果源码.zip Android仿苹果的...
c语言实现非常漂亮祝福烟花效果.7z
# c语言实现非常漂亮祝福烟花效果 本文将介绍如何使用c语言实现非常漂亮的祝福烟花效果。通过本文,您将学习到如何使用c语言实现动态图像效果,以及如何利用计算机图形学知识来实现烟花效果。 首先,我们需要了解...
实用JS+CSS实现的烟花效果,欢迎大家下载学习。可下载学习
不使用动态gif图片,纯代码实现的烟花绽放效果。 希望对正在学习GDI的朋友有所帮助。 主题是新年快乐
在Python中,我们可以使用第三方库如pygame来实现烟花效果。首先需要安装pygame库,然后创建一个窗口,接着定义烟花的颜色、形状、速度等属性,最后通过不断更新烟花的位置和绘制烟花来实现烟花效果。 在运行此代码...
本源代码基于vc的mfc调用glut库开发,用于演示幻彩粒子烟花效果。超级简单而强大的好东东哦。运行本程序另外需要glut库。相应的库文件和安装方式都已附带在压缩文件档案里了,方便大家快速调试成功哦
Java烟花效果代码,鼠标按下开始放焰火 松开鼠标键时焰火爆炸。测试时候请注意,程序运算量较大 请记得看完后关掉此页面 以免影响机器速度。 操作说明: 按键 Q/A : 增大/减小 重力加速度 按键 W/S : 增大/...